从概念上讲,numpy 中的 N 维数组是啥? [复制]

Posted

技术标签:

【中文标题】从概念上讲,numpy 中的 N 维数组是啥? [复制]【英文标题】:Conceptually, what is an N-dimensional array in numpy? [duplicate]从概念上讲,numpy 中的 N 维数组是什么? [复制] 【发布时间】:2020-05-06 23:56:23 【问题描述】:

这里是新手。试图从概念上学习在 python 中拥有一个 n 维数组意味着什么。例如,如果我使用以下代码创建一个 ndarray:

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

1,2,3 和 4,5,6 块到底有什么关系?

如果我添加另一个块 [6, 7, 8] 会怎样?我可以将它们视为同一网格的不同行吗?我知道我可以通过使用上述方法传入 N 个列表来创建一个 N 维数组,但不能仅从概念上理解数组具有多个维度的含义。

非常感谢

【问题讨论】:

虽然将 1d 和 2d 数组与我们使用的事物相关联相当容易,例如行或列表,以及矩阵(和向量),但很难将其他维度概念化,0d、3d、4d 等. 有些人,来自线性代数背景,甚至对 1d 有问题。对他们来说,一切都是二维的,一个矩阵。 numpy 采用了 1 和 2d 的概念,并将其推广到 0d 及以上。所以从某种意义上说,N-dimensional 数组是一个抽象对象,严格来说不能被概念化。 【参考方案1】:

维数与列表嵌套的深度相同。您的示例是 2d ,因为它是列表列表。添加第三个列表不会更改维度。如果它是列表列表的列表,那么它会变成 3d。

如果您打印该数组,您会看到它显示为二维网格,其中每个列表是一行,每个列表索引是一列。越往高维越难以想象,但 3d 网格可以渲染为立方体,然后 4d 及更高的尺寸就太难以想象了。

--编辑--

正如所指出的,数组与嵌套列表不同。它们在功能上非常不同。但最初的问题是关于多维数组的概念化。

import numpy as np

array = np.arange(27)
print(array)
array = array.reshape(3, 9)
print(array)
array = array.reshape(3, 3, 3)
print(array)

如果您运行此脚本,您可以看到显示为 1d、2d 和 3d 数组的相同信息。

# 1D
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]

# 2D
[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]]

# 3D
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]

一维数组类似于数轴。二维数组就像一个网格。 3d 数组可以表示 3x3x3 立方体中的每个单元格。对于学习如何对数组进行操作,这并不是特别有用。但是对于能够从概念上掌握N维数组的结构,对我很有帮助。

【讨论】:

欣赏它@schwartz721!将它们视为同一网格中的行是否公平? NumPy 数组不是嵌套列表。它们可以从嵌套列表中创建,但在概念上和行为上有所不同。 正如 user2357112 所说,由于数组的操作方式等原因,数组与嵌套列表不同。但对于概念化来说,这不是一个糟糕的起点 @schwartz721 这正是我想要的。谢谢!!! 这真的很有帮助 @schwartz721 谢谢

以上是关于从概念上讲,numpy 中的 N 维数组是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从填充零的 3 维 numpy 数组创建 4 维 numpy 数组?

NumPy学习(让数据处理变简单)

看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

NumPy Ndarray对象

numpy.array 从 d 维数组中选择所有偶数元素

如何在 Numpy 中“压缩”几个 N-D 数组?