我使用Python和NumPy,在“转置”方面有一些问题:
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
调用a.T并不是变换数组。如果a是[[],[]],那么它的转置是正确的,但是我需要[…,…,…]的转置。
我使用Python和NumPy,在“转置”方面有一些问题:
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
调用a.T并不是变换数组。如果a是[[],[]],那么它的转置是正确的,但是我需要[…,…,…]的转置。
当前回答
它的工作原理和预期的完全一样。一维数组的转置仍然是一维数组!(如果你习惯了matlab,它基本上没有一维数组的概念。Matlab的“1D”数组是2D的。)
如果你想把你的一维向量变成一个二维数组,然后转置它,只需用np对它进行切片。newaxis(或None,它们是一样的,只是newaxis更可读)。
import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)
一般来说,你不需要担心这个。如果你只是出于习惯,添加额外的维度通常不是你想要的。Numpy会在进行各种计算时自动广播一个1D数组。通常不需要区分行向量和列向量(它们都不是向量)。它们都是2D的!)当你只想要一个向量时。
其他回答
你可以使用np.expand_dims()函数来调换一个1-D数组(平面数组),就像你的例子中那样:
>>> a = np.expand_dims(np.array([5, 4]), axis=1)
array([[5],
[4]])
Np.expand_dims()将为所选轴添加一个维度。在本例中,我们使用axis=1,它增加了一个列维度,有效地调换了原始平面数组。
numpy中的函数名为column_stack。
>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
—>列/行矩阵:
>>> a=np.array([1,2,4])
>>> a[:, None] # col
array([[1],
[2],
[4]])
>>> a[None, :] # row, or faster `a[None]`
array([[1, 2, 4]])
正如@joe-kington所说,你可以用np替换None。新蜡是为了可读性。
要将1d数组“转置”为2d列,可以使用numpy.vstack:
>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
[2],
[3]])
它也适用于香草列表:
>>> numpy.vstack([1,2,3])
array([[1],
[2],
[3]])
它的工作原理和预期的完全一样。一维数组的转置仍然是一维数组!(如果你习惯了matlab,它基本上没有一维数组的概念。Matlab的“1D”数组是2D的。)
如果你想把你的一维向量变成一个二维数组,然后转置它,只需用np对它进行切片。newaxis(或None,它们是一样的,只是newaxis更可读)。
import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)
一般来说,你不需要担心这个。如果你只是出于习惯,添加额外的维度通常不是你想要的。Numpy会在进行各种计算时自动广播一个1D数组。通常不需要区分行向量和列向量(它们都不是向量)。它们都是2D的!)当你只想要一个向量时。