【问题标题】:Why the second dimension in a Numpy array is empty?为什么 Numpy 数组的第二维是空的?
【发布时间】:2018-12-22 09:00:15
【问题描述】:

这里为什么输出

array = np.arange(3)
array.shape

(3,)

而不是

(1,3)

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

【问题讨论】:

  • @NaN reshape 会变成(1, 3),但是为什么原来的数组不是(1,3)?
  • 文档中有介绍
  • 您正在创建一个根据定义只有一维而不是二维的向量。
  • 或者,只是重言式,相当于“您的数组是一维的,因为您创建了一个一维数组”,这不会错误
  • @juanpa.arrivillaga 是的,这是同义反复,因为他们的问题归结为“为什么我创建的一维数组只有一维?”

标签: numpy dimensions


【解决方案1】:

如果有混淆,(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 版,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

【讨论】:

  • 我会说 Python 有各种 容器,标量的概念并不真正适用。而且列表没有维度:)
  • 这个答案真的不是他们所说的答案,最好是评论。
  • @David,我开始写评论,然后觉得太长了。这个问题已经讨论过很多次了,可能应该作为重复关闭,或者可能是一个意见问题。
  • @David 这回答了这个问题,只要我能理解 OPs 的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2023-03-22
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多