Saltar al contenido

Transformar un vector de fila en un vector de columna en Numpy

Solución:

Simplemente podemos usar la funcionalidad de remodelación 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)

puedes usar el transponer operación para hacer esto:

Ejemplo:

In [2]: a = np.array([[1,2], [3,4], [5,6]])
In [5]: a.shape
Out[5]: (3, 2)

In [6]: a_trans = a.T    #or: np.transpose(a), a.transpose()
In [8]: a_trans.shape
Out[8]: (2, 3)
In [7]: a_trans
Out[7]: 
array([[1, 3, 5],
       [2, 4, 6]])

Tenga en cuenta que la matriz original a seguirá sin modificarse. La operación de transposición solo hará una copia y la transpondrá.


Si su matriz de entrada es más bien 1D, entonces puede promover la matriz a un vector de columna mediante la introducción de un nuevo eje (singleton) como la segunda dimensión. A continuación se muestra un ejemplo:

# 1D array
In [13]: arr = np.arange(6)

# promotion to a column vector (i.e., a 2D array)
In [14]: arr = arr[..., None]    #or: arr = arr[:, np.newaxis]

In [15]: arr
Out[15]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])

In [12]: arr.shape
Out[12]: (6, 1)

Para el caso 1D, otra opción sería utilizar numpy.atleast_2d() seguido de una operación de transposición, como sugiere ankostis en los comentarios.

In [9]: np.atleast_2d(arr).T
Out[9]: 
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5]])

Ésta es una muy buena pregunta.

Algunas de las formas que he compilado para hacer esto son:

>> import numpy as np
>> a = np.array([1, 2, 3], [2, 4, 5])
>> a
>> array([[1, 2],
       [2, 4],
       [3, 5]])

Otra forma de hacerlo:

>> a.T
>> array([[1, 2],
       [2, 4],
       [3, 5]])
       

Otra forma de hacer esto será:

>> a.reshape(a.shape[1], a.shape[0])
>> array([[1, 2],
       [3, 2],
       [4, 5]])
       

He usado una matriz bidimensional en todos estos problemas, el problema real surge cuando hay un vector de fila unidimensional que desea colocar en columnas de manera elegante.

La remodelación de Numpy tiene una funcionalidad en la que pasa la de la dimensión (número de filas o número de columnas) que desea, numpy puede descubrir la otra dimensión por sí mismo si pasa la otra dimensión como -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)

Por lo tanto, puede elegir entre 1 dimensión sin preocuparse por la otra dimensión siempre que (m * n) / your_choice es un entero.

Si quieres saber más sobre esto -1 dirígete a: ¿Qué significa -1 en la remodelación de numpy?

Nota: Todas estas operaciones devuelven una nueva matriz y no modifican la matriz original.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *