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

标签 numpy dimensions

为什么输出在这里

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 甚至没有标量。仅当以 MATLAB 为标准时,形状为 (3,) 的数组才缺少维度。
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

关于numpy - 为什么 Numpy 数组中的第二维是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51334276/

相关文章:

python - 计算 FFT 振幅的不确定性

multithreading - 移动窗口时 PyQt4 视频播放器崩溃

java - 在多维数组中存储信息并在JOptionPane中显示信息

google-analytics - 未设置 Google Analytics 自定义维度

python - 为什么在使用 PIL 与 cv2 加载时图像的宽度和高度会反转?

python - 如何有效地将函数应用于图像中每个像素的每个 channel (用于颜色转换)?

python - 使用数组的 Tensorflow 哈希表查找

python - 查看不同数据类型下的对象数组

python-2.7 - 在keras中使用reshape删除尺寸?

android - 在我的手机上调整大小的图像在另一部手机上的大小是否相同?