使用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'>
编辑: 我认为我在这里的实际问题是,在使用numpy.sum
Python整数列表上比使用Python自己的整数快sum
吗?
另外,使用Python整数和标量有numpy.int32
什么含义(包括性能)?例如,对于a += 1
,如果类型a
为Python整数或a
,是否在行为或性能上有所不同numpy.int32
?我很好奇,是否可以更快地使用NumPy标量数据类型,例如numpy.int32
在Python代码中增加或减去很多值。
为了澄清起见,我正在进行生物信息学模拟,该模拟的一部分包括将多维numpy.ndarray
s分解为单个标量和,然后对其进行附加处理。我正在使用Python
3.2和NumPy 1.6。
提前致谢!
我很好奇并且定时了。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
问题内容: 我遇到了Python的Numpy,set和NaN(非数字)的意外行为: 在这里,np.nan产生单个元素集,而Numpy的nans产生一个集合中的多个nans。float(’nan’)也是如此!并注意: 我想知道这种差异是如何产生的,以及不同行为背后的合理性是什么。 问题答案: NAN的特性之一是NAN!= NAN,与所有其他数字不同。但是,在尝试插入新成员之前,first的实现会先检
问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转
问题内容: 内置和之间有什么区别? 例 输出: 我发现这里说的是: float32单精度浮点数:符号位,8位指数,23位尾数 找不到内置格式。 问题答案: Python的标准类型是C :http : //docs.python.org/2/library/stdtypes.html#typesnumeric NumPy的标准相同,并且也相同。
上面代码中的θ是,但在matlab中应该是,这是正确的。
我最近使用了Python 3.5,注意到新的矩阵乘法运算符(@)有时与numpy点运算符的行为不同。例如,对于3D数组:
问题内容: 我正在努力确切地了解其工作原理。我看了一下文档和一些示例,但看起来似乎并不固定. 这是我们上课的例子: 对于两个数组A和B 我认为可以,但是我不确定(它正在正确处理其中之一的移调吗?)。谁能告诉我这里的实际情况(以及使用时的一般情况)? 问题答案: einsum是做什么的? 假设我们有两个多维数组,A和B。现在假设我们要… 乘 A用B一种特殊的方式来创造新的产品阵列; 然后也许 沿特定