使用 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 整数或 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 sum 与 NumPy numpy.sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922231/
大家早上好我在float学方面遇到了一些问题,完全迷失在“.to_f”、“*100”和“.0”中!我希望有人能帮助我解决我的具体问题,并准确解释他们的解决方案为何有效,以便我下次理解这一点。我的程序需要做两件事:对一组小数求和,确定它们的和是否正好为1.0确定1.0与数字总和之间的差值-将变量的值设置为使总和等于1.0的精确差值。例如:[0.28,0.55,0.17]->总和应为1.0,但我一直得到1.xxxxxx。我正在以下列方式实现总和:sum=array.inject(0.0){|sum,x|sum+(x*100)}/100我需要此功能的原因是我正在读取一组来自excel的小数。
我需要计算我的Rails3应用中两个字段的乘积之和(即相当于Excel的sumproduct函数)。Rails中是否有一种方法可以帮助解决这个问题?如果没有,那么使用自定义sql的Rails代码是什么?例如,酒店有很多房间。房间具有sqft(平方英尺)、数量(该尺寸)和hotel_id的属性。我想计算给定酒店中所有房间的总平方英尺。在SQL中,对于Hotel.id=8,我相信以下语句会起作用:selectsum(rooms.sqft*rooms.quantity)asSumSqftfromroomsinnerjoinhotelsonrooms.hotel_id=hotels.idwhe
我正在尝试使用ProjectEuler中的Ruby解决数学问题。Here是我尝试的第一个:Ifwelistallthenaturalnumbersbelow10thataremultiplesof3or5,weget3,5,6and9.Thesumofthesemultiplesis23.Findthesumofallthemultiplesof3or5below1000.请帮助我改进我的代码。total=0(0...1000).eachdo|i|total+=iif(i%3==0||i%5==0)endputstotal 最佳答案
我注意到array.sum和array.inject(:+)产生不同的结果。这是什么原因?a=[10,1.1,6.16]a.inject(:+)#=>17.259999999999998a.sum#=>17.26 最佳答案 Array#sum的C实现委托(delegate)给Kahansummationalgorithm当它的一些输入是float时。这个算法......significantlyreducesthenumericalerrorinthetotalobtainedbyaddingasequenceoffinitepre
我有一个Seller模型,其中有_manyItems。我想获得卖家所有商品的总售价。在seller.rb我有deftotal_item_costitems.to_a.sum(&:sale_price)end如果所有商品都有促销价,这会很好用。但是,如果它们尚未售出,则sale_price为零并且total_item_cost中断。在我的应用中,sale_price可以是nil或零。在我的total_item_cost方法中,如何将nil值视为零? 最佳答案 items.map(&:sale_price).compact.sum或it
我有2个哈希,例如:{'a'=>30,'b'=>14}{'a'=>4,'b'=>23,'c'=>7}其中a、b和c是对象。我怎样才能将这些散列的键相加以获得新的散列,例如:{'a'=>34,'b'=>37,'c'=>7} 最佳答案 a_hash={'a'=>30,'b'=>14}b_hash={'a'=>4,'b'=>23,'c'=>7}a_hash.merge(b_hash){|k,a_value,b_value|a_value+b_value}=>{"a"=>34,"b"=>37,"c"=>7}b_hash.merge(a_ha
所以我在Ruby2.4.0中运行了一些基准测试并意识到了这一点(1...1000000000000000000000000000000).sum立即计算而(1...1000000000000000000000000000000).inject(:+)花了很长时间,我刚刚中止了操作。我的印象是Range#sum是Range#inject(:+)的别名,但事实并非如此。那么sum是如何工作的,为什么它比inject(:+)快得多?N.B.Enumerable#sum(由Range实现)的文档没有说明惰性求值或任何类似的内容. 最佳答案
关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion我的go代码生成了与bash命令行不同的sha256sum值。我通读了各种问题和答案,它们都指向我已经完成的工作,正如这个社区要求我在发帖前做的那样这是我在go上的sha256sum代码sha256Key:=verifyEmail+":"+md5password+":"+dateStrhasherS
这是我的程序。当我运行它时,它给出了以下错误-a.sumundefined(typefloat32hasnofieldormethodsum)packagemainimport("fmt")typeCalculationinterface{operation(input[]float32)}typeAdditionstruct{sumfloat32}func(aAddition)operation(input[]float32){a.sum=input[0]for_,a:=rangeinput[1:]{a.sum+=a}fmt.Println("Sum:",a.sum)}funcmai
我正在尝试计算数字节点的总和。以下代码不返回除HTML之外的任何内容。我知道sum()需要一个节点集。我想我已经正确地创建了变量。我做错了什么。谢谢。XML示例:2015-03-14507200RetailerCashIncentive16507201Acme#210250.000507202Acme#210360.000507203Acme#10080.000507207Acme#2228200.003598419AcmeNO1071NONQUALNONQUAL598421AcmeNO1072NONQUALNONQUALXSLT: 最佳答案