关于python:Numpy转置未给出预期结果

Numpy transpose not giving expected result

我正在尝试为转置方法在Python scipy模块中使用一个非常基本的示例,但未给出预期的结果。 我在pylab模式下使用Ipython。

1
2
3
4
5
6
a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)

如果我打印数组" a"和" b"的内容,它们是相似的。

期望是:(这将导致Matlab om转置)

1
2
3
 [1,
  2,
  3]


转置是一维数组的基本操作。

添加新轴并转置:

1
2
3
4
5
6
>>> a[None].T
array([[1],
       [2],
       [3]])
>>> np.newaxis is None
True

或重塑:

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

或按照@Sven Marnach在评论中的建议,在末尾添加新轴:

1
2
3
4
>>> a[:,None]
array([[1],
       [2],
       [3]])


NumPy的transpose()有效地反转了数组的形状。如果数组是一维的,则意味着它无效。

在NumPy中,数组

1
array([1, 2, 3])

1
2
3
array([1,
       2,
       3])

实际上是相同的–它们只是空白不同。您可能想要的是相应的二维数组,对于transpose(),二维数组可以正常工作。还可以考虑使用NumPy的matrix类型:

1
2
3
4
5
6
7
8
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


将1D数组整形为2D数组的更简洁的方法是:

1
a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))

形状向量中的-1表示"填写任何数字即可完成此工作"


您应该尝试:a = array([[1,2,3]])a = array([[1],[2],[3]]),即a应该是一个矩阵(行向量,列向量)。