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

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

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


当前回答

你只能对2D数组进行转置。您可以使用numpy。矩阵来创建一个2D数组。这迟了三年,但我只是在可能的解决方案中添加了一些:

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

其他回答

我只是巩固上面的帖子,希望它能帮助别人节省一些时间:

下面的数组有(2,)维数,它是一个一维数组,

b_new = np.array([2j, 3j])  

有两种方法来转置一个1-D数组:


用“np”进行切片。或者没有。

print(b_new[np.newaxis].T.shape)
print(b_new[None].T.shape)

其他写法,以上不用T运算。!

print(b_new[:, np.newaxis].shape)
print(b_new[:, None].shape)

换行[]或使用np。矩阵,意味着增加一个新的维度。

print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)

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

如果你想把你的一维向量变成一个二维数组,然后转置它,只需用np对它进行切片。newaxis(或None,它们是一样的,只是newaxis更可读)。

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

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

有一个方法没有在答案中描述,但在文档中描述了numpy. narray .transpose方法:

对于一维数组,这没有影响,因为转置向量就是相同的向量。要将1-D数组转换为2D列向量,必须添加一个额外维度。np.atleast2d (a)。T实现了这一点,就像a[:, np.newaxis]一样。

你可以这样做:

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

这(在我看来)比使用新蜡更好。

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

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

使用两个括号对,而不是一个。这将创建一个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)