转置一个NumPy数组

我使用Python和NumPy,并有“转置”的一些问题:

a=array([5,4]) print a print aT 

调用aT不是转置数组。 如果a例如[[],[]]那么它转换正确,但我需要转置[...,...,...]

它的工作原理应该是这样的。 一数组的转置仍然是一维数组! (如果你习惯了matlab,它基本上没有一维数组的概念,Matlab的“一维”数组是2D的。)

如果你想把你的一维vector变成一个二维数组,然后转置它,只需使用np.newaxis (或None ,它们是一样的,新newaxis只是更具可读性)。

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

一般来说,你不需要担心这一点。 如果你只是出于习惯而join额外的维度通常不是你想要的。 在进行各种计算时,Numpy会自动播放一维数组。 当你只需要一个向量时,通常不需要区分行向量和列向量(都不是向量 ,它们都是2D!)。

使用两个支架对,而不是一个。 这将创build一个二维数组,可以进行转置,与您创build的一维数组不同,如果您使用一个支架对。

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

更彻底的例子:

 >>> a = [3,6,9] >>> b = np.array(a) >>> bT array([3, 6, 9]) #Here it didn't transpose because 'a' is 1 dimensional >>> b = np.array([a]) >>> bT 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, 3, 4]) a = a.reshape((-1, 1)) # <--- THIS IS THE TRICK print a array([[1], [2], [3], [4]]) 

一旦你得到这个元组里面的-1基本上是说“尽可能多的行”,我觉得这是“转置”数组的最可读的方式。

您可以将现有的vector转换为matrix,方法是将其包含在一组额外的方括号内。

 from numpy import * v=array([5,4]) ## create a numpy vector array([v]).T ## transpose a vector into a matrix 

numpy也有一个matrix类(参见数组和matrix )…

 matrix(v).T ## transpose a vector into a matrix 

numpy 1D数组 – >列/行matrix:

 >>> 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.newaxisreplaceNone以提高可读性。

你只能转置一个二维数组。 你可以使用numpy.matrix创build一个2D数组。 这是迟了三年,但我只是增加了一套可能的解决scheme:

 import numpy as np m = np.matrix([2, 3]) mT 

转置

 x = [[0 1], [2 3]] 

 xT = [[0 2], [1 3]] 

以及代码是:

 x = array([[0, 1],[2, 3]]); np.transpose(x) 

这是一个链接的更多信息:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html

正如上面提到的一些注释,1D数组的转置是1D数组,因此转换1D数组的一种方法是将数组转换为如下的matrix:

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

numpy函数的名字是column_stack 。

 >>>a=np.array([5,4]) >>>np.column_stack(a) array([[5, 4]]) 

另一个解决scheme…. 🙂

 import numpy as np a = [1,2,4] 

[1,2,4]

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

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

要将1d数组“转置”到2d列,可以使用numpy.vstack

 >>> numpy.vstack(numpy.array([1,2,3])) array([[1], [2], [3]]) 

它也适用于香草名单:

 >>> numpy.vstack([1,2,3]) array([[1], [2], [3]]) 

实际上,[5,4]的转置是[5,4]

 [5, 4] 

PS:有一个简单的方法来转置一个二维matrix –

 zip(*a)