为什么 Numpy 数组中的第二个维度是空的?

Why the second dimension in a Numpy array is empty?

为什么这里输出

array = np.arange(3)
array.shape

(3,)

而不是

(1,3)

缺少的维度是什么意思或等于什么?

以防混淆,(3,) 并不意味着缺少维度。逗号是单个元素元组的标准 Python 表示法的一部分。形状 (1,3), (3,), and (3,1) 不同,

虽然它们可以包含相同的 3 个元素,但它们在计算中的使用 (broadcasting) 不同,它们的打印格式不同,它们的等效列表也不同:

In [21]: np.array([1,2,3])
Out[21]: array([1, 2, 3])
In [22]: np.array([1,2,3]).tolist()
Out[22]: [1, 2, 3]
In [23]: np.array([1,2,3]).reshape(1,3).tolist()
Out[23]: [[1, 2, 3]]
In [24]: np.array([1,2,3]).reshape(3,1).tolist()
Out[24]: [[1], [2], [3]]

而且我们不必停止只添加一个单一维度:

In [25]: np.array([1,2,3]).reshape(1,3,1).tolist()
Out[25]: [[[1], [2], [3]]]
In [26]: np.array([1,2,3]).reshape(1,3,1,1).tolist()
Out[26]: [[[[1]], [[2]], [[3]]]]

numpy 中,数组可以有 0、1、2 或更多维度。 1 维与 2 维一样合乎逻辑。

在 MATLAB 中,一个矩阵总是有 2 个暗淡的(或更多),但它不一定是那样。严格来说 MATLAB 甚至没有标量。形状为(3,)的数组只有在以MATLAB为标准时才缺一维

numpy 建立在 Python 之上,它作为标量和列表(可以嵌套)。 Python 列表有多少维度?

如果您想了解历史,MATLAB 是作为一组 Fortran 线性代数例程的前端开发的。鉴于这些问题,这些例程解决了二维矩阵的概念,并且行向量与列向量是有意义的。直到 3.something 版本,MATLAB 才被推广到允许超过 2 个维度(在 1990 年代后期)。

numpy 是基于为 Python 提供数组的几次尝试(例如 numeric)。这些开发人员对数组采用了更通用的方法,其中 2d 是人为约束。这在计算机语言和数学(和物理学)中具有优先权。 APL 是在 1960 年代开发的,首先作为一种数学符号,然后作为一种计算机语言。像 numpy 它的 arrays 可以是 0d 或更高。 (因为我在使用 MATLAB 之前使用了 APL,所以 numpy 方法感觉很自然。)


APL 中没有单独的列表或元组。所以一个array的形状,rho A本身就是一个数组,rho rho A是A的维数,也叫rank.

http://docs.dyalog.com/14.0/Dyalog%20APL%20Idioms.pdf