【问题标题】:Intuitive understanding of Numpy nd-array直观理解 Numpy nd-array
【发布时间】:2017-09-28 01:11:53
【问题描述】:

所以我已经阅读了手册 - 但结构仍然让我感到困惑。具体是什么关系:

  • nd-array 和 Python list?
  • nd-array 和 Python 字典?
  • nd-array 和 Pandas DataFrame?
  • nd-arrays 和 Numpy “结构化数组”?

另外,nd-array 就像一个列表序列吗?

“n 维”在哪里出现?因为它看起来就像一个矩阵,只有两个维度。

谢谢!

【问题讨论】:

  • 您是否在询问与列表相比它们如何扩展到更高维度?或者它们与其他 Python 数据结构相比如何?

标签: python arrays numpy data-structures


【解决方案1】:
  • ndarray vs list:两者都可以保存元素的一维集合;但是,在 ndarray 中,元素通常都是相同的类型(例如,64 位浮点数),并且 numpy 为这些向量的计算提供了运算符(和幕后优化)。例如,您可以(快速)通过nda3 = nda1 + nda2 在 nda1 和 nda2 中添加元素。对于列表,您需要执行lst3 = [a + b for (a, b) in zip(lst1, lst2)]。另一方面,您可以轻松地在列表中插入和删除项目。 ndarrays 是为数字向量的高性能计算而设计的;列表专为对任意对象集合进行临时操作而设计。
  • ndarray 与字典:它们完全不同。字典允许您按名称从任意集合中选择对象; ndarrays 通常只保存数字,并且只允许通过索引号查找(除非你进入了你没有问过的recarrays)。
  • ndarray 与 Pandas 数据框:数据框有点类似于多维 ndarray,因为它们旨在在每一列中保存相似类型的数据。但是,数据帧的不同列通常会保存不同类型的数据,而多维 ndarray 中的所有元素通常都是相同类型的数字。此外,数据框提供跨行和列的基于名称的索引。我喜欢将数据框视为一维 ndarray 的字典,即数据框的每一列都像一维 ndarray,您可以按名称检索列然后对其进行操作。但是 Pandas 提供了额外的索引优势,因此您还可以为每一行命名,然后根据行名和列名将元素从表中拉出。 Pandas 还为元素操作提供了运算符(例如,将两列相加),类似于 numpy。但它通常通过匹配索引项而不是行/列号来做到这一点。因此,Pandas 中的数据操作速度较慢,但​​更可靠。
  • ndarrays 与结构化数组:结构化数组有点像 Pandas 数据框的行(每列可以有不同的标准化数据类型)。但是操作它们的语义更像是标准的 numpy 操作——在操作之前,您必须确保正确的数据位于数组中的正确位置。 (如果需要,Pandas 将对表格重新排序,以便行名匹配。)
  • ndarray 与列表序列:ndarray 被初始化并像列表序列一样显示,如果你取二维数组的第 n 个元素,你会得到一个列表(行)。但在内部,在 ndarray 中,每个元素都具有相同的数据类型(与列表不同),并且值在内存中紧密且统一地打包。这允许处理器一起对所有值快速执行操作。列表更像是指向存储在其他地方的值的指针,并且列表或列表列表的数学计算没有优化。此外,您不能将 2D 或 3D 索引与列表列表一起使用(您必须说 lst[1][2][3],而不是 lst[1,2,3]),也不能轻松地按元素进行操作(lst1+lst2 不像 nda1+nda2 那样进行元素加法)。
  • 更高维度:您可以创建具有任意数量维度的 ndarray。这有点类似于列表列表的列表。例如,这会生成一个 3D 数组:np.array([[[1, 2], [3, 4]], [[5, 6], [7,8]]])

【讨论】:

  • 谢谢马蒂亚斯。我现在更好地理解了这些差异。
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2012-02-14
  • 2019-01-31
  • 2016-01-07
  • 2018-05-26
相关资源
最近更新 更多