我使用Python和NumPy,在“转置”方面有一些问题:

import numpy as np
a = np.array([5,4])
print(a)
print(a.T)

调用a.T并不是变换数组。如果a是[[],[]],那么它的转置是正确的,但是我需要[…,…,…]的转置。


当前回答

使用两个括号对,而不是一个。这将创建一个2D数组,它可以被转置,不像您使用一个括号对创建的1D数组。

import numpy as np    
a = np.array([[5, 4]])
a.T

更彻底的例子:

>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9])         #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3],              #Here it did transpose because a is 2 dimensional
       [6],
       [9]])

使用numpy的shape方法来查看这里发生了什么:

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)

其他回答

另一个解决方案…: -)

import numpy as np

a = [1,2,4]

[1, 2, 4]

b = np.array([a]).T

数组([[1], [2], [4]])

使用两个括号对,而不是一个。这将创建一个2D数组,它可以被转置,不像您使用一个括号对创建的1D数组。

import numpy as np    
a = np.array([[5, 4]])
a.T

更彻底的例子:

>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9])         #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3],              #Here it did transpose because a is 2 dimensional
       [6],
       [9]])

使用numpy的shape方法来查看这里发生了什么:

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)

—>列/行矩阵:

>>> 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数组:

a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT

print a
array([[1],
       [2],
       [3],
       [4]])

一旦你理解了-1在这里意味着“需要多少行”,我发现这是最易读的“转置”数组的方式。如果你的数组是高维的,简单地使用a.T。

正如上面提到的一些评论,1D数组的转置是1D数组,所以转置1D数组的一种方法是将数组转换为如下的矩阵:

np.transpose(a.reshape(len(a), 1))