- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在寻找一种使用 numpy
计算累积和的方法,但不想前滚该值(或将其设置为零)以防累积和非常接近为零和负数。
例如
a = np.asarray([0, 4999, -5000, 1000])
np.cumsum(a)
返回 [0, 4999, -1, 999]
但是,我想在计算过程中将 [2]
-value (-1) 设置为零。问题是这个决定只能在计算期间完成,因为中间结果不是先验的。
预期的数组是:[0, 4999, 0, 1000]
这样做的原因是我得到的值非常小( float ,而不是示例中的整数),这是由于浮点计算实际上应该为零。计算累积和会导致错误的那些值。
最佳答案
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 累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309237/
我对以下需要使用 SQL 查询而不是 plsql 来解决的问题感到困惑。这个想法是建立一个累积列来计算之前的所有月份。输入表看起来像 Month 1 2 3 .. 24 我需要建立下表:
我正在寻找一个整洁的解决方案,最好使用 tidyverse 这个问题符合this answer ,但它确实有一个额外的扭曲。我的数据有一个整体分组变量“grp”。在每个这样的组中,我想根据“试验”定义
我正在尝试在 Spotfire 中创建一个运行余额列,该列应该如下图所示。本质上,我想逐行计算“金额”列的累积总计,并且我希望它随着日期的变化从 0 开始。 我尝试过几个 OVER 函数:Sum([A
我是一名优秀的程序员,十分优秀!