例如
a = np.asarray([0,4999,-5000,1000])np.cumsum(a)
返回[0,-1,999]
但是,我想在计算过程中将[2] – 值(-1)设置为零.问题是这个决定只能在计算过程中完成,因为中间结果不是先验的.
预期的数组是:[0,1000]
这样做的原因是我得到的值非常小(浮点数,而不是示例中的整数),这是由浮点计算引起的,实际上应该为零.计算累积和会使那些导致错误的值复杂化.
解决方法 Kahan summation algorithm可以解决问题.不幸的是,它是 not implemented in numpy.这意味着需要自定义实现:def kahan_cumsum(x): x = np.asarray(x) cumulator = np.zeros_like(x) compensation = 0.0 cumulator[0] = x[0] for i in range(1,len(x)): y = x[i] - compensation t = cumulator[i - 1] + y compensation = (t - cumulator[i - 1]) - y cumulator[i] = t return cumulator
我不得不承认,这并不是问题所要求的. (在示例中,cumsum的第3个输出处的值为-1是正确的).但是,我希望这能解决问题背后的实际问题,这与浮点精度有关.
总结以上是内存溢出为你收集整理的python – 有条件的numpy累积和全部内容,希望文章能够帮你解决python – 有条件的numpy累积和所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)