使用 Python的本机和函数和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'>
编辑:我认为我的实际问题是在Python整数列表中使用numpy.sum比使用Python自己的总和更快吗?
另外,使用Python整数与标量numpy.int32有什么影响(包括性能)?例如,对于a = 1,如果a的类型是Python整数或numpy.int32,是否存在行为或性能差异?我很好奇是否更快地使用NumpPy标量数据类型(如numpy.int32)来获取在Python代码中添加或减去很多的值.
为了澄清,我正在进行生物信息学模拟,其中部分包括将多维numpy.ndarray折叠成单个标量和,然后进行额外处理.我使用的是Python 3.2和NumPy 1.6.
提前致谢!
我好奇并定时了.对于numpy数组,numpy.sum似乎要快得多,但在列表上要慢得多.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