Python的总和与NumPy的numpy.sum

dpyro:

使用Python的本机sum函数和NumPy的函数在性能和行为上有什么区别numpy.sumsum在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.sumPython整数列表上比使用Python自己的整数快sum吗?

另外,使用Python整数和标量有numpy.int32什么含义(包括性能)例如,对于a += 1,如果类型a为Python整数或a ,是否在行为或性能上有所不同numpy.int32我很好奇是否可以更快地使用NumPy标量数据类型,例如numpy.int32在Python代码中增加或减去很多值。

为了澄清起见,我正在进行生物信息学模拟,其中一部分包括将多维numpy.ndarrays分解为单个标量和,然后对其进行额外处理。我正在使用Python 3.2和NumPy 1.6。

提前致谢!

Akavall:

我很好奇并且定时了。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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章