我们说我有一个形状的行向量(1,256)。我想将其转换为形状(256,1)的列向量。你会怎么做Numpy?
答案 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)
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])
。在这里,您明确指定了尺寸。