15 novembre 2019 / Viewed: 1570 / Comments: 0 / Edit
Exemples de comment ajouter une colonne de 1 à une matrice avec numpy
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, 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.])
Liens | Site |
---|---|
numpy.c_ | scipy doc |
numpy.concatenate | scipy doc |
numpy.transpose | scipy doc |
ones() | scipy doc |
Je développe le présent site avec le framework python Django. Je m'intéresse aussi actuellement dans le cadre de mon travail au machine learning pour plusieurs projets (voir par exemple) et toutes suggestions ou commentaires sont les bienvenus !