30

我正在 Python scipy 模块中尝试一个非常基本的示例transpose()方法,但它没有给出预期的结果。我正在将 Ipython 与 pylab 模式一起使用。

a = array([1,2,3]
print a.shape
>> (3,)

b = a.transpose()
print b.shape
>> (3,)

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

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

 [1,
  2,
  3]
4

4 回答 4

33

NumPytranspose()有效地反转了数组的形状。如果数组是一维的,这意味着它没有效果。

在 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.

于 2012-08-09T14:23:45.717 回答
31

转置是一维数组的 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]])
于 2012-08-09T14:31:09.377 回答
9

将一维数组重塑为二维数组的更简洁的方法是:

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

形状向量中的 -1 表示“填写任何数字使其工作”

于 2012-08-09T14:44:09.287 回答
6

你应该试试:a = array([[1,2,3]])or a = array([[1],[2],[3]]),也就是说,a应该是一个矩阵(行向量,列向量)。

于 2012-08-09T14:23:36.943 回答