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