为什么在这里输出
array = np.arange(3)
array.shape
是
(3,)
而不是
(1,3)
缺少的维度是什么意思或等于什么?
答案 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
中没有单独的列表或元组。因此,array
,rho A
的形状本身就是一个数组,rho rho A
是A的维数,也称为rank
。