18

numpy.array将 Python 对象存储在withdtype='o'与 using list(或listoflist等,在更高维度)中的优缺点是什么?

在这种情况下,numpy 数组是否更有效?(似乎他们无法避免间接,但在多维情况下可能更有效。)

4

2 回答 2

11

NumPy 数组的切片工作方式不同。NumPy 文档在该主题上花费了很长的一页。 强调一些要点:

  • NumPy 切片可以通过多个维度进行切片
  • NumPy 基本切片生成的所有数组始终是原始数组的视图,而列表切片是浅拷贝。
  • 您可以将标量分配给 NumPy 切片。
  • 您可以通过将不同长度的序列分配给切片来插入和删除 a 中的项目list,而 NumPy 会引发错误。

演示:

>>> a = np.arange(4, dtype=object).reshape((2,2))
>>> a
array([[0, 1],
       [2, 3]], dtype=object)
>>> a[:,0]             #multidimensional slicing
array([0, 2], dtype=object)
>>> b = a[:,0]
>>> b[:] = True        #can assign scalar
>>> a                  #contents of a changed because b is a view to a
array([[True, 1],
       [True, 3]], dtype=object)    

此外,NumPy 数组为支持它们的对象数组提供了方便的数学运算(例如fraction.Fraction)。

于 2013-04-11T09:53:13.667 回答
0

Numpy 比 Python 列表使用更少的内存。此外,Numpy 比列表更快、更方便。

例如:如果你想在 Python 中添加两个列表,你必须遍历列表中的所有元素。另一方面,在 Numpy 中,您只需添加它们。

# adding two lists in python
sum = []
l1 = [1, 2, 3]
l2 = [2, 3, 4]
for i in range(len(l1)):
   print sum.append(l1[i]+l2[i])
# adding in numpy
a1 = np.arange(3)
a2 = np.arange(3)
sum2 = a1+a2
print sum2
于 2017-04-20T00:30:32.803 回答