为什么在这里输出
array = np.arange(3)
array.shape
Run Code Online (Sandbox Code Playgroud)
是
(3,)
Run Code Online (Sandbox Code Playgroud)
并不是
(1,3)
Run Code Online (Sandbox Code Playgroud)
缺少的维度是什么意思或等于什么?
万一出现混乱,(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]]
Run Code Online (Sandbox Code Playgroud)
而且我们不必停下来添加一个单例尺寸:
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]]]]
Run Code Online (Sandbox Code Playgroud)
在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。
http://docs.dyalog.com/14.0/Dyalog%20APL%20Idioms.pdf
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |