Disons que j'ai un vecteur ligne de la forme (1, 256). Je veux plutôt le transformer en un vecteur de colonne de la forme (256, 1). Comment feriez-vous à Numpy?
vous pouvez utiliser l'opération transpose pour ce faire:
Exemple:
In [2]: a = np.array([[1,2], [3,4], [5,6]])
In [5]: np.shape(a)
Out[5]: (3, 2)
In [6]: a_trans = a.transpose()
In [8]: np.shape(a_trans)
Out[8]: (2, 3)
In [7]: a_trans
Out[7]:
array([[1, 3, 5],
[2, 4, 6]])
Notez que le tableau d'origine a
restera toujours non modifié. L'opération de transposition ne fera qu'une copie et la transposera.
Nous pouvons simplement utiliser la fonctionnalité de remodelage de numpy:
a=np.array([[1,2,3,4]])
a:
array([[1, 2, 3, 4]])
a.shape
(1,4)
b=a.reshape(-1,1)
b:
array([[1],
[2],
[3],
[4]])
b.shape
(4,1)
Celui-ci est une très bonne question.
Voici certaines des méthodes que j'ai compilées pour ce faire:
>> import numpy as np
>> a = np.array([1, 2, 3], [2, 4, 5])
>> a
>> array([[1, 2],
[2, 4],
[3, 5]])
Une autre façon de procéder:
>> a.T
>> array([[1, 2],
[2, 4],
[3, 5]])
Une autre façon de procéder sera:
>> a.reshape(a.shape[1], a.shape[0])
>> array([[1, 2],
[3, 2],
[4, 5]])
J'ai utilisé un tableau à 2 dimensions dans tous ces problèmes, le vrai problème se pose lorsqu'il existe un vecteur de ligne à 1 dimension que vous souhaitez classer avec élégance.
La refonte de Numpy a une fonctionnalité où vous passez celle de la dimension (nombre de lignes ou nombre de colonnes) que vous voulez, numpy peut comprendre l'autre dimension par elle-même si vous passez l'autre dimension comme -1
>> a.reshape(-1, 1)
>> array([[1],
[2],
[3],
[2],
[4],
[5]])
>> a = np.array([1, 2, 3])
>> a.reshape(-1, 1)
>> array([[1],
[2],
[3]])
>> a.reshape(2, -1)
>> ValueError: cannot reshape array of size 3 into shape (2,newaxis)
Ainsi, vous pouvez donner votre choix de 1-Dimension sans vous soucier de l'autre dimension tant que (m * n) / your_choice
est un entier.
Si vous voulez en savoir plus à ce sujet -1
dirigez-vous vers: Que signifie -1 dans le remodelage numpy?
Remarque: Toutes ces opérations renvoient un nouveau tableau et ne modifient pas le tableau d'origine.
Pour convertir un vecteur ligne en vecteur colonne in Python peut être important, par exemple, utiliser diffusion:
import numpy as np
def colvec(rowvec):
v = np.asarray(rowvec)
return v.reshape(v.size,1)
colvec([1,2,3]) * [[1,2,3], [4,5,6], [7,8,9]]
Multiplie la première ligne par 1, la deuxième ligne par 2 et la troisième ligne par 3:
array([[ 1, 2, 3],
[ 8, 10, 12],
[ 21, 24, 27]])
En revanche, en essayant d'utiliser un vecteur de colonne tapé comme matrice:
np.asmatrix([1, 2, 3]).transpose() * [[1,2,3], [4,5,6], [7,8,9]]
échoue avec l'erreur ValueError: shapes (3,1) and (3,3) not aligned: 1 (dim 1) != 3 (dim 0)
.