Comment ajouter une colonne de 1 à une matrice avec numpy ? (machine learning; python)

Exemples de comment ajouter une colonne de 1 à une matrice avec numpy

Ajouter une colonne de 1 à une matrice avec des données d'entraînement

Considérons la matrice X avec des données d'entraînement (avec n=6 observations et d=3 "features"):

\begin{equation}
X = \left( \begin{array}{ccc}
x_{11} & x_{12} & x_{13} \\
x_{21} & x_{22} & x_{23} \\
x_{31} & x_{32} & x_{33} \\
x_{41} & x_{42} & x_{43} \\
x_{51} & x_{52} & x_{53} \\
x_{61} & x_{62} & x_{63}
\end{array}\right)
\end{equation}

L'objectif est d'ajouter une colonne de 1 à la matrice X:

\begin{equation}
X = \left( \begin{array}{ccc}
1 & x_{11} & x_{12} & x_{13} \\
1 & x_{21} & x_{22} & x_{23} \\
1 & x_{31} & x_{32} & x_{33} \\
1 & x_{41} & x_{42} & x_{43} \\
1 & x_{51} & x_{52} & x_{53} \\
1 & x_{61} & x_{62} & x_{63}
\end{array}\right)
\end{equation}

Créons une matrice avec numpy:

>>> import numpy as np
>>> X = np.random.randint(100, size=(6,3))
>>> X
array([[46, 16, 11],
       [79, 95, 54],
       [35,  3, 90],
       [62, 71, 63],
       [14, 61, 80],
       [92, 69, 57]])

Pour créer une matrice de taille (6-by-1) on peut utiliser la fonction ones():

>>> b = np.ones(X.shape[0])
>>> b.shape
(6,)

et pour ajouter celle ci a la matrice X on peut ensuite utiliser numpy.c_, exemple:

>>> X = np.c_[np.ones(X.shape[0]),X]
>>> X
array([[  1.,  46.,  16.,  11.],
       [  1.,  79.,  95.,  54.],
       [  1.,  35.,   3.,  90.],
       [  1.,  62.,  71.,  63.],
       [  1.,  14.,  61.,  80.],
       [  1.,  92.,  69.,  57.]])

Note: verifier si d < n sinon transposer la matrice:

>>> X
array([[46, 79, 35, 62, 14, 92],
       [16, 95,  3, 71, 61, 69],
       [11, 54, 90, 63, 80, 57]])
>>> if X.shape[0] < X.shape[1]: X = X.T 
... 
>>> X
array([[46, 16, 11],
       [79, 95, 54],
       [35,  3, 90],
       [62, 71, 63],
       [14, 61, 80],
       [92, 69, 57]])

Ajouter une colonne de 1 à une matrice 1D

Ajouter une colonne de 1 à une matrice 1D, exemple

>>> Y_new = np.array([11.,  64.,  20.])
>>> Y_new
array([ 11.,  64.,  20.])

On peut utiliser la fonction numpy concatenate:

>>> Y_new = np.concatenate([np.ones(1),Y_new])
>>> Y_new
array([  1.,  11.,  64.,  20.])

Références

Liens Site
numpy.c_ scipy doc
numpy.concatenate scipy doc
numpy.transpose scipy doc
ones() scipy doc