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

时间:2018-07-14 00:39:11

标签: numpy dimensions

为什么在这里输出

array = np.arange(3)
array.shape

(3,)

而不是

(1,3)

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

1 个答案:

答案 0 :(得分:2)

万一发生混乱,(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个dim(或更多),但是不必一定要这样。严格来说,MATLAB甚至没有标量。仅当以MATLAB为标准时,形状为(3,)的数组才缺少维。

numpy是基于Python构建的,它作为标量和列表(可以嵌套)。 Python列表有多少个维度?

如果您想了解历史,MATLAB是作为Fortran线性代数例程集的前端开发的。考虑到这些问题,这些例程解决了二维矩阵的概念,并且行向量和列向量很有意义。直到第3版,MATLAB才被广泛推广以允许2个以上的维度(在1990年代后期)。

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


APL中没有单独的列表或元组。因此,arrayrho A的形状本身就是一个数组,rho rho A是A的维数,也称为rank

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