使用Python的本机sum
函数和NumPy的函数在性能和行为上有什么区别numpy.sum
?sum
在NumPy的数组上工作并且numpy.sum
在Python列表上工作,它们都返回相同的有效结果(尚未测试过诸如溢出的边缘情况)但类型不同。
>>> import numpy as np
>>> np_a = np.array(range(5))
>>> np_a
array([0, 1, 2, 3, 4])
>>> type(np_a)
<class 'numpy.ndarray')
>>> py_a = list(range(5))
>>> py_a
[0, 1, 2, 3, 4]
>>> type(py_a)
<class 'list'>
# The numerical answer (10) is the same for the following sums:
>>> type(np.sum(np_a))
<class 'numpy.int32'>
>>> type(sum(np_a))
<class 'numpy.int32'>
>>> type(np.sum(py_a))
<class 'numpy.int32'>
>>> type(sum(py_a))
<class 'int'>
编辑:我认为我在这里的实际问题是,在使用numpy.sum
Python整数列表上比使用Python自己的整数快sum
吗?
另外,使用Python整数和标量有numpy.int32
什么含义(包括性能)?例如,对于a += 1
,如果类型a
为Python整数或a ,是否在行为或性能上有所不同numpy.int32
?我很好奇是否可以更快地使用NumPy标量数据类型,例如numpy.int32
在Python代码中增加或减去很多值。
为了澄清起见,我正在进行生物信息学模拟,其中一部分包括将多维numpy.ndarray
s分解为单个标量和,然后对其进行额外处理。我正在使用Python 3.2和NumPy 1.6。
提前致谢!
我很好奇并且定时了。numpy.sum
对于numpy数组来说似乎要快得多,但在列表上要慢得多。
import numpy as np
import timeit
x = range(1000)
# or
#x = np.random.standard_normal(1000)
def pure_sum():
return sum(x)
def numpy_sum():
return np.sum(x)
n = 10000
t1 = timeit.timeit(pure_sum, number = n)
print 'Pure Python Sum:', t1
t2 = timeit.timeit(numpy_sum, number = n)
print 'Numpy Sum:', t2
结果x = range(1000)
:
Pure Python Sum: 0.445913167735
Numpy Sum: 8.54926219673
结果x = np.random.standard_normal(1000)
:
Pure Python Sum: 12.1442425643
Numpy Sum: 0.303303771848
我正在使用Python 2.7.2和Numpy 1.6.1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句