在Numpy中将行向量转换为列向量

时间:2016-04-03 11:18:37

标签: python numpy multidimensional-array linear-algebra numpy-ndarray

我们说我有一个形状的行向量(1,256)。我想将其转换为形状(256,1)的列向量。你会怎么做Numpy?

5 个答案:

答案 0 :(得分:5)

我们可以简单地使用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)

答案 1 :(得分:4)

您可以使用 transpose 操作来执行此操作:

示例:

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

请注意,原始数组a仍将保持不变。转置操作只需复制并转置它。

答案 2 :(得分:1)

这是一个非常好的问题。

我编译的一些方法是:



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




另一种方法:



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




另一种方法是:



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




我在所有这些问题中都使用了二维数组,当你想要优雅地进行列式化的一维行向量时,会出现真正的问题。

Numpy的重塑有一个功能,您可以传递所需的维度(行数或列数),如果您将另一个维度作为{{{0}传递,numpy可以自行计算出其他维度1}}



-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)是整数,您就可以选择1维,而无需担心其他维度。

如果您想了解有关此(m * n) / your_choice的更多信息,请访问: What does -1 mean in numpy reshape?

注意:所有这些操作都返回一个新数组,并且不会修改原始数组。

答案 3 :(得分:0)

在Python中将行向量转换为列向量非常重要,例如使用广播

(\d{1,2})\s(Jan(?:uary)?)\s(\d{2,4})
|-- 1 --|  |---- 2 -----|  |-- 3 --|

将第一行乘以1,将第二行乘以2,将第三行乘以3:

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]]

相反,尝试使用类型为矩阵的列向量:

array([[ 1,  2,  3],
       [ 8, 10, 12],
       [  21, 24, 27]])

失败,错误为np.asmatrix([1, 2, 3]).transpose() * [[1,2,3], [4,5,6], [7,8,9]]

答案 4 :(得分:0)

您可以使用 numpy 对象的 reshape() 方法。

要将任何行向量转换为列向量,请使用

array.reshape(-1, 1)

要将任何列向量转换为行向量,请使用

array.reshape(1, -1)

enter image description here

reshape() 用于改变矩阵的形状。 因此,如果您想创建一个 2x2 矩阵,您可以调用 a.reshape(2, 2) 之类的方法。

那么为什么答案中是 -1

如果您不想明确指定一个维度(或未知维度)并希望 numpy 为您找到值,您可以将 -1 传递给该维度。所以 numpy 会自动从 ramining 维度为你计算值。请记住,您不能将 -1 传递给多个维度。

因此在第一种情况(array.reshape(-1, 1))中,第二个维度(列)是一个(1),而第一个(行)是未知的(-1)。因此 numpy 会弄清楚如何将 1×4 表示为 x×1 并为您找到 x。

使用 reshape 方法的替代解决方案是 a.reshape(a.shape[1], a.shape[0])。在这里,您明确指定了尺寸。