从概念上讲,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 维数组是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章