当前位置 : 主页 > 编程语言 > python >

Python的总和vs. NumPy的numpy.sum

来源:互联网 收集:自由互联 发布时间:2021-06-25
使用 Python的本机和函数和NumPy的numpy.sum之间在性能和行为上有什么不同? sum适用于NumPy的数组,numpy.sum适用于Python列表,它们都返回相同的有效结果(没有测试边缘情况,如溢出)但不同的类
使用 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

网友评论