对Numpy nd-array的直观理解

时间:2017-09-28 01:11:54

标签: python arrays numpy data-structures

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

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

此外, nd-array 就像一系列列表一样吗?

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

谢谢!

1 个答案:

答案 0 :(得分:3)

  • ndarray vs list:两者都可以包含一维元素集合;但是,在ndarray中,元素通常都是相同的类型(例如,64位浮点数),numpy提供运算符(和幕后优化)来计算这些向量。例如,您可以(快速)通过nda3 = nda1 + nda2在nda1和nda2中添加元素。使用列表,您需要执行lst3 = [a + b for (a, b) in zip(lst1, lst2)]。另一方面,您可以轻松插入和删除列表中的项目。 ndarrays用于对数字向量进行高性能计算;列表是为任意对象集合的临时操作而设计的。
  • ndarray vs dictionary:这些非常不同。字典允许您按名称从任意集合中选择对象; ndarrays通常只保存数字,只允许通过索引号查找(除非你进入重组,你没有问过)。
  • ndarray与Pandas数据帧:数据帧有点类似于多维ndarrays,因为它们被设计为在每列中保存相似类型的数据。但是,数据帧的不同列通常会包含不同类型的数据,而多维ndarray中的所有元素通常都是相同类型的数字。此外,数据框跨行和列提供基于名称的索引。我喜欢将数据帧看作类似于一维ndarray的字典,即数据帧的每一列都像一维的ndarray,您可以按名称检索列然后对其进行操作。但是Pandas提供了额外的索引优势,因此您还可以为每一行指定一个名称,然后根据行和列名称将元素从表中拉出。 Pandas还为元素操作提供运算符(例如,将两列相加),类似于numpy。但它通常通过匹配索引术语而不是行/列数来实现。因此,Pandas中的数据操作速度较慢但更可靠。
  • ndarrays vs结构化数组:结构化数组有点像Pandas数据帧的行(每列中可以有不同的标准化数据类型)。但是操作它们的语义更像是标准的numpy操作 - 在操作它之前,你必须确保正确的数据位于数组中的正确位置。 (Pandas会对表进行重新排序,以便在需要时匹配行名。)
  • ndarray vs list of lists:ndarrays被初始化并显示为列表序列,如果你获取2D数组的第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]]])