web-dev-qa-db-fra.com

Transformer un vecteur ligne en vecteur colonne dans Numpy

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?

12
MY_G

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.

6
kmario23

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)
10
Mahdi Ghelichi

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.

2
DuttaA

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).

1
Markus Strauss