转置一维NumPy数组

284 投票
15 回答
551465 浏览
提问于 2025-04-16 17:23

我在使用Python和NumPy时遇到了一些关于“转置”的问题:

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

调用 a.T 并没有正确地转置数组。如果 a 比如是 [[],[]],那么它能正确转置,但我需要的是 [...,...,...] 的转置。

15 个回答

119

对于一维数组

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

180

使用两个括号对,而不是一个。这会创建一个二维数组,这种数组可以进行转置,而如果你只用一个括号对,就只能创建一维数组。

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)
314

它的工作方式完全正常。一个一维数组的转置仍然是一个一维数组!如果你习惯用matlab的话,可能会觉得它根本没有一维数组的概念。matlab里的“一维”数组其实是二维的。

如果你想把你的一维向量变成二维数组,然后再转置,可以用 np.newaxis(或者 None,它们是一样的,newaxis 只是更容易理解)。

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

不过一般来说,你不需要太担心这个。如果你只是出于习惯添加额外的维度,通常这并不是你想要的。Numpy在进行各种计算时会自动处理一维数组。通常情况下,当你只想要一个向量时,没必要区分行向量和列向量(其实它们都不是“向量”,它们都是二维的!)。

撰写回答