在Numpy中转置一个一维数组而不将其转换为矩阵

12

我的目标是将行向量转换为列向量,反之亦然。关于numpy.ndarray.transpose的文档如下:

对于一维数组,这没有影响。(要在列向量和行向量之间进行转换,请先将一维数组转换为矩阵对象。)

然而,当我尝试这样做时:

my_array = np.array([1,2,3])
my_array_T = np.transpose(np.matrix(myArray))

我得到了想要的结果,虽然是以矩阵形式 (matrix([[66],[640],[44]])),但我也收到了以下警告:

PendingDeprecationWarning: 矩阵子类不是表示矩阵或处理线性代数的推荐方式(请参见https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html)。 请更正您的代码以使用常规ndarray。

my_array_T = np.transpose(np.matrix(my_array))
我应该如何正确地转置一个ndarray呢?

1
看起来docstring中的建议应该被删除或更改为不推荐使用numpy.matrix - Warren Weckesser
3个回答

14

一维数组本身可以进行转置,这与Matlab不同,Matlab中不存在一维数组,至少是二维的。

你想要做的是重塑它:

my_array.reshape(-1, 1)
或:
my_array.reshape(1, -1)

根据您需要的向量类型(列向量或行向量)。

-1 是一种类似于广播的方式,使用所有可能的元素,而 1 则创建第二个必需的维度。


4
my_array[:, None] 也可以完成所需的重塑。 - hpaulj
同意,这也是一种重塑的方法。 - Matthieu Brucher

2
如果您的数组是my_array,并且您想将其转换为列向量,则可以执行以下操作:
my_array.reshape(-1, 1)

对于行向量,您可以使用

my_array.reshape(1, -1)

这两个也可以互换,效果与预期相同。


1
我理解为,使用reshape
my_array.reshape(my_array.size, -1)

这里有一个额外的东西,你可能是指(-1, 1),在这种情况下,-1实际上是1。 - Matthieu Brucher
@MatthieuBrucher 无论是 1 还是 -1 都可以 ;) - rafaelc
是的,除了-1进行额外的计算之外,最简单的方法是(-1,1)。 - Matthieu Brucher
@MatthieuBrucher 时间差可能会非常非常小,但是你说得很有道理 ;) - rafaelc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接