转置一个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.newaxis
replaceNone
以提高可读性。
你只能转置一个二维数组。 你可以使用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)