为什么 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
.
为什么这里输出
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
.