Python:列表和numpy对象数组之间的差异

时间:2013-04-11 08:35:42

标签: python numpy

在使用numpy.array的{​​{1}}与使用dtype='o'(或list list等的情况下存储Python对象有哪些优缺点,在更高的维度)?

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

2 个答案:

答案 0 :(得分:7)

切片与NumPy数组的工作方式不同。 The NumPy docs devote a lengthy page on the topic.要强调一些观点:

  • NumPy切片可以切割多个维度
  • NumPy基本切片生成的所有数组始终是原始数组的视图,而列表切片是浅层副本。
  • 您可以将标量指定给NumPy切片。
  • 您可以通过为切片指定不同长度的序列来插入和删除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)提供方便的数学运算。

答案 1 :(得分: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