让我们考虑a一个一维行/水平数组:
import numpy as np
N = 10
a = np.arange(N) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a.shape # (10,)
现在我想要b一个一维列/垂直数组转置a:
b = a.transpose() # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b.shape # (10,)
但该.transpose()方法返回一个完全相同的ndarray,形状完全相同!
我期望看到的是
np.array([[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]])
这可以通过
c = a.reshape(a.shape[0], 1) # or c = a; c.shape = (c.shape[0], 1)
c.shape # (10, 1)
令我惊讶的是,它的形状是 ,(10, 1)而不是(1, 10)。
在 Octave/Scilab 我可以这样做:
N = 10
b = 0:(N-1)
a = b'
size(b) % ans = 1 10
size(a) % ans = 10 1
我知道 numpy ndarrays 不是矩阵(如此处所讨论的),但是 numpy 的转置函数的行为对我来说没有意义!如果您能帮助我了解这种行为的意义以及我在这里缺少什么,我将不胜感激。
PS所以到目前为止我所理解b = a.transpose()的是b = a; b.shape = b.shape[::-1],如果你有一个“二维数组”,(N, 1)它将返回一个(1, N)整形数组,正如你对转置运算符所期望的那样。但是,numpy 似乎将“一维数组”(N,)视为 0D 标量。我认为他们应该将此方法命名为其他名称,因为这非常具有误导性/令人困惑的恕我直言。
泛舟湖上清波郎朗
慕盖茨4494581
相关分类