Python总和与NumPy numpy.sum - python

使用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'>

编辑:我认为我的实际问题是,在Python整数列表上使用numpy.sum是否比使用Python自己的sum更快?

此外,使用Python整数与标量numpy.int32的含义(包括性能)是什么?例如,对于a += 1,如果a的类型是Python整数或numpy.int32,是否在行为或性能上有所不同?我很好奇,如果将NumPy标量数据类型(例如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

Python:如何停止多线程的numpy? - python

我知道这似乎是一个荒谬的问题,但是我必须在与部门中其他人共享的计算服务器上定期运行作业,当我开始10个作业时,我真的希望它只占用10个核心而不是更多;我不在乎每次运行一个内核所需的时间是否更长:我只是不想让它侵犯其他人的领土,这将需要我放弃工作等等。我只想拥有10个核心,仅此而已。更具体地说,我在基于Python 2.7.3和numpy 1.6.1的Redh…

numpy.savetxt“元组索引超出范围”? - python

我试图在文本文件中写几行,这是我使用的代码:import numpy as np # Generate some test data data = np.arange(0.0,1000.0,50.0) with file('test.txt', 'w') as outfile: outfile.write('…

用Numpy将数组分区为N个块 - python

有这个How do you split a list into evenly sized chunks?用于将数组拆分为多个块。无论如何,对于使用Numpy的巨型阵列,这样做是否更有效率? 参考方案 尝试 numpy.array_split 。从文档中:>>> x = np.arange(8.0) >>> np.array…

randn和normal之间的Python区别 - python

我正在使用Python的randn模块中的normal和numpy.random函数。这些功能与我在http://docs.scipy.org手册中所读的内容非常相似(它们都与高斯分布有关),但是我应该注意任何细微的区别吗?如果是这样,在什么情况下使用特定功能会更好? 参考方案 randn似乎提供了一些标准化正态分布的分布(均值0和方差1)。 normal需…

在numpy数组中使用“或”的多个条件 - python

所以我有这些条件:A = 0至10 或 40至60B = 20至50我有这段代码:area1 = N.where((A>0) & (A<10)),1,0) area2 = N.where((B>20) & (B<50)),1,0) 我的问题是:如何在numpy中执行“或”条件? 参考方案 如果numpy为boolean…