使用Python的本机sum函数和NumPy的函数在性能和行为上有什么区别numpy.sum?sum在NumPy的数组上工作并numpy.sum在Python列表上工作,它们都返回相同的有效结果(尚未测试过诸如溢出的边缘情况)但类型不同。
sum
numpy.sum
>>> 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.sumPython整数列表上比使用Python自己的整数快sum吗?
另外,使用Python整数和标量有numpy.int32什么含义(包括性能)?例如,对于a += 1,如果类型a为Python整数或a ,是否在行为或性能上有所不同numpy.int32?我很好奇,是否可以更快地使用NumPy标量数据类型,例如numpy.int32在Python代码中增加或减去很多值。
numpy.int32
a += 1
a
为了澄清起见,我正在进行生物信息学模拟,该模拟的一部分包括将多维numpy.ndarrays分解为单个标量和,然后对其进行附加处理。我正在使用Python 3.2和NumPy 1.6。
numpy.ndarray
提前致谢!
我很好奇并且定时了。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):
x = range(1000)
Pure Python Sum: 0.445913167735 Numpy Sum: 8.54926219673
结果x = np.random.standard_normal(1000):
x = np.random.standard_normal(1000)
Pure Python Sum: 12.1442425643 Numpy Sum: 0.303303771848
我正在使用Python 2.7.2和Numpy 1.6.1