在使用Python中的numpy.array时,将Python对象以dtype='o'的形式存储与使用列表(或更高维度的列表等)相比有哪些优缺点?numpy数组在这种情况下是否更高效?(似乎它们无法避免间接性,但在多维情况下可能更高效。)
在NumPy数组中,切片操作与普通Python列表不同。NumPy文档专门有一篇详细介绍该主题的文章。以下是其中的几点要点:
list
中插入和删除元素,而这样做会导致NumPy引发错误。Demo:
>>> 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
)进行操作。
flat
、flatten
、nditer
。 - Neil GNumpy比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
Fraction
对象数组(或类似对象)做一些数学运算,而不需要使用半打嵌套的zip
和map
。 - Jaime