我在Python scipy模块中尝试了一个非常基本的例子,用于转置方法,但没有给出预期的结果。我正在使用Ipython和pylab模式。
a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)
如果我打印数组“a”和“b”的内容,它们是相似的。
期望是:(这将导致Matlab om转置)
[1,
2,
3]
答案 0 :(得分:24)
Transpose是一维数组的noop。
添加新轴并转置:
>>> a[None].T
array([[1],
[2],
[3]])
>>> np.newaxis is None
True
或重塑:
>>> a.reshape(a.shape+(1,))
array([[1],
[2],
[3]])
或者@Sven Marnach在评论中建议,最后添加新轴:
>>> a[:,None]
array([[1],
[2],
[3]])
答案 1 :(得分:23)
NumPy的transpose()
有效地逆转了数组的形状。如果数组是一维的,这意味着它没有效果。
在NumPy中,数组
array([1, 2, 3])
和
array([1,
2,
3])
实际上是相同的 - 它们只在空格上有所不同。您可能想要的是相应的二维数组,transpose()
可以正常工作。还可以考虑使用NumPy的matrix
类型:
In [1]: numpy.matrix([1, 2, 3])
Out[1]: matrix([[1, 2, 3]])
In [2]: numpy.matrix([1, 2, 3]).T
Out[2]:
matrix([[1],
[2],
[3]])
请注意,对于大多数应用程序,简单的一维数组可以作为行或列向量正常工作,但是当来自Matlab时,您可能更喜欢使用numpy.matrix
。
答案 2 :(得分:5)
您应该尝试:a = array([[1,2,3]])
或a = array([[1],[2],[3]])
,即a
应为矩阵(行向量,列向量)。
答案 3 :(得分:5)
将1D阵列重塑为2D阵列的更简洁方法是:
a = np.array([1,2,3]), a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))
形状矢量中的-1表示“填写使这个工作的任何数字”