问题标签 [cumsum]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
819 浏览

matlab - cumsum 有上限和下限?

我想找到一种向量化的方法来计算向量的累积和,但有上限和下限。

就我而言,输入仅包含 1 和 -1。您可以在答案中使用此假设。当然,也欢迎提供更通用的解决方案。

例如:

当累积总和达到上限(在第 3 个元素处)时,不再增加。同样,当累积和达到下限(在第 7 个元素处)时,它不会再减少。for 循环版本将是这样的:

你有什么想法?

0 投票
1 回答
1229 浏览

r - R:缺失日期的累计和

我有两个数据框,一个(数据框 1)带有日期和每个日期的一些观察结果。在另一个表(数据框 2)中,我的日期比另一个数据框中的日期多。

我想做的是计算数据框1的累积和并将结果放在数据框2中。数据框2中存在但不在数据框1中的任何日期都应该简单地具有前一天的值

数据框 1

数据框 2

如果有任何不清楚的地方,请告诉我。任何帮助都会很棒!

谢谢,

麦克风

0 投票
1 回答
298 浏览

arrays - 在 R 中快速计算四维数组的累积和

我对 R 编程比较陌生,到目前为止,这个网站对我很有帮助,但是我找不到一个已经涵盖了我想知道的问题。所以我决定自己发布一个问题。

我的问题如下:我想找到有效的方法来计算四维数组的累积和,即我在四维数组 x 中有数据,并想编写一个计算数组 x_sum 的函数,使得

x_sum[i,j,k,l] = sum_{ind1 <= i, ind2 <= j, ind3 <= k, ind4 <=l} x[ind1, ind2, ind3, ind4]。

我想使用这个功能数十亿次,这使得它尽可能高效非常重要。虽然我已经提出了几种计算总和的方法(见下文),但我怀疑更有经验的 R 程序员可能能够找到更有效的解决方案。因此,如果有人可以提出更好的方法,我将不胜感激。

这是我到目前为止所尝试的:

我发现了三种不同的实现(每一种都带来了速度上的提升)(见下面的代码):一个在 R 中使用 cumsum() 函数(cumsum_4R)和两个在 C 中完成“繁重”的实现(使用 .C() 接口)。C 中的第一个实现仅仅是使用嵌套 for 循环和指针算术 (cumsumC_4_old) 编写总和的天真尝试。在第二个 C 实现 (cumsumC_4) 中,我尝试使用以下文章中的想法调整我的代码

正如您在下面的源代码中看到的那样,适应相对不平衡:对于某些维度,我能够替换所有嵌套的 for 循环,但不能替换其他维度。你有关于如何做到这一点的想法吗?

在三个实现上使用 microbenchmark,对于大小为 40x40x40x40 的数组,我得到以下结果:

附加信息: 1) 由于这使得安装任何需要的软件包变得更容易,我在我的个人计算机上运行 Windows 下的基准测试,但我计划在我大学的计算机上运行完成的模拟,它运行在 Linux 下。

编辑:2)四维数据 x[i,j,k,l] 实际上是外部函数的两次应用的乘积:首先,矩阵与自身的外部乘积(即outer(mat, mat)),然后取另一个矩阵的成对最小值(即外部(mat2,mat2,pmin))。那么数据就是产品

x = 外部(垫,垫)* 外部(垫 2,垫 2,pmin),


x[i,j,k,l] = mat[i,j] * mat[k,l] * min(mat2[i,j], mat2[k,l])

四维数组具有相应的对称性。

3)我首先需要这些累积总和的原因是我想运行一个测试的模拟,我需要对索引的“矩形”进行部分总和:我想迭代表格的所有总和

sum_{k1<=i1 <= m1,k2<=i2 <= m2, k1 <= i3 <= m1, k2 <= i4 <=m2} x[i1, i2, i3, i4],

其中 1<=k1<=m1<=n,1<=k2<=m2<=n。为了避免一遍又一遍地计算相同变量的和,我首先计算所有的累积和,然后计算矩形上的和作为累积和的函数。你知道更有效的方法吗?编辑到 3):为了包括所有潜在的重要方面:我还想计算表格的总和

sum_{k1<=i1 <= m1,k2<=i2 <= m2, 1 <= i3 <= n, 1 <= i4 <=n} x[i1, i2, i3, i4]。

(由于我可以使用累积和轻松获得它们,因此我之前没有包含此规范)。

这是我使用的 C 代码(我保存为“cumsumC.c”):

这是R函数“cumsum_4R”和用于调用和比较R中的累积和函数的代码(在Windows下;对于Linux,需要调整命令dyn.load/dyn.unload;理想情况下,我想使用这些函数在 50^4 大小的数组上,但由于调用 microbenchmark 需要一段时间,所以我在这里选择了 n=40):

谢谢您的帮助!

0 投票
1 回答
34969 浏览

python - 如何在 Pandas 的组内使用 cumsum?

我有

我想val为 each运行一些id,所以所需的输出如下所示:

这是我尝试过的:

这是我得到的错误:

0 投票
1 回答
98 浏览

python - 每个组最近成员的运行总和

这是输入数据框:

我想按 id 对条目进行分组,然后计算到目前为止看到的每个组的最新成员的运行总和。以下是所需输出的样子,并解释了它是如何获得的:

这里有一些更详细的解释:1)id=1的行有3=2+1,因为当时你有2组,As和Bs,每组1行,所以你必须从每个组中取一行团体。

2) id=2 的行有 -1=-3+2 因为那时你有 2 个组,As 和 Bs。As 中的最新行是,2 A -3而 Bs 中的单个(因此也是最近的)行是1 B 2,因此您添加了这 2 行。

3)在id=6的那一行,你加起来

您从每个组中取出 1 行,那是当时最近的行。

0 投票
1 回答
9783 浏览

python - Pandas 数据框 - 运行总和并重置

我想计算给定列中的运行总和(当然不使用循环)。需要注意的是,我有另一列指定何时将运行总和重置为该行中存在的值。最好通过以下示例进行解释:

desired_col是我要计算的值。

0 投票
1 回答
2003 浏览

python - 具有初始值的 Pandas cumsum

因此,给定以下单列数据框:

我想为给定列创建一个累积和,但给累加器一个初始值。所以对于上面的数据框,初始值为 100,这看起来像:

任何帮助,非常感谢。

0 投票
2 回答
107 浏览

r - 如何将日期格式(dmY)更改为年份(Y)并查找年度累积总和?

我有一个 2 列数据框 x ,如下所示。“Publication.Date”列的格式为“%d.%m.%Y”。无论如何要从“Publication.Date”中创建一个格式为“%Y”的“年”新列?

我尝试使用 dplyr 创建一个新的累积总和列(如下所示),但实际上我想创建一个“年度累积总和,N”的新列,即每年添加“n”。

我想要的结果应该如下。感谢您的任何建议。谢谢。

0 投票
1 回答
2250 浏览

r - R data.table 累积和函数

我创建了以下可重现的示例:

我的问题是 Col3 没有正确计算 cumsum 并且在 1000 处保持静态。我已经根据本网站上的其他答案改编了我的代码,但需要一些帮助。我希望 Col3 从 1000 开始,然后累积添加 Col4(滞后上一行)。

我希望输出显示以下内容:

这是否需要循环计算,因为每一列都依赖于另一列的结果?谢谢你。

由于@Frank 的回答,根据下面的评论更新示例并包括新代码:

0 投票
1 回答
876 浏览

python - How to perform cumulative calculations in pandas that restart with each change in date?

This is a simplified version of my data:

I would like to calculate cumulative volume per day, so that the end result would be something like:

Output:

Notice how instead of doing the regular cumsum(), the calculation re-starts when there's a change in Date, in the example from 2015-01-01 to 2015-01-02.