问题标签 [accumarray]

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 回答
4782 浏览

matlab - 是否有一个 accumarray() 将矩阵作为`val`?

accumarray()val参数必须是向量。在我的情况下,我需要对矩阵的列求和(或平均)。有没有实现这一点的功能或方法?

我现在正在做的是在一个 for 循环中,我分别对列值求和:

0 投票
0 回答
292 浏览

matlab - matlab中的accumarray命令

我想通过以下方式执行通常使用循环进行的计算:

而是使用 accumarray 命令:

有人可以指出如何以这种方式计算 N 吗?

0 投票
1 回答
280 浏览

matlab - 如何使 Accumarray 与 Struct 数组一起使用?

这可以做到吗?基本上,我有一个结构数组val(包含我的自定义结构的列表),我想使用自定义乘法函数Multiply将所有元素相乘,我不想使用循环。

我尝试使用accumarray(indx, val', [1 1], @Multiply)withindx=ones(lengths(val), 2)但这不起作用(至少对于 Octave 3.4.3)。执行时,在我的C=Multiply(A,B)函数内部,A 被传递给整个结构数组,并且 B 为空,而不是 A 是数组的第一个元素,B 是正常情况下的第二个元素。

希望我在这里说清楚了。谢谢

0 投票
1 回答
61 浏览

arrays - accumarray 中的函数

如果我有一列日期和一列数据,我使用此代码来查找每个日期的数据的累积总和,如第三列所示:


现在我想将一天内的每个数据点除以当天数据的总和。例如:

如果我尝试:

这会将整个第二列除以每个总和。有没有办法限制这一点,以便每天只对第二列的成员进行划分?

0 投票
0 回答
181 浏览

matlab - accumarray(subs, val) 其中 val 为零

我有一个 vv包含每个刻度的市场交易量数据的向量,以及一个minuteIdx包含不同分钟索引的向量。我accumarray用来对每分钟内的音量求和,如下所示:

通常它工作得很好,但有时无法在一分钟内获得所有滴答声的体积数据,并且0体积向量中有s。这导致minuteVolumes向量比其他情况要短,因为我摆脱了所有的零。例如,如果vv以 a 开头1(第一分钟只有一个滴答声),则 minuteVolumes 很175长,但如果我改为vv以 a 开头,0minuteVolumes只有174long。我希望 a0出现在我的minuteVolumes向量中,而不是让它更短。有没有聪明的方法来实现这一点?我最初的逻辑是,要进行交易,交易量必须非零,但我没有考虑偶尔出现的不良数据。

0 投票
1 回答
329 浏览

matlab - 乐趣取决于 accumarray 中子项和值的顺序

accumarray()关于“subs”的第一个注释中,首次出现在 MATLAB R14sp3 文档中,说:

注意 如果 subs 中的下标没有排序, fun 不应该依赖于其输入数据中值的顺序。

我不清楚什么被认为是排序的。认为:

  1. 应该subs在某种意义上排序issorted(subs,'rows'),或者...
  2. 在线性索引意义上,即issorted(sub2ind([2 2],subs(:,1), subs(:,2)))

我想依靠:

如果有人还可以提供来自旧版本的示例/测试(以检查向后兼容性),其中例如 1) 为假而 2) 为真,那就太好了。

PS。我对 的替代品大多不感兴趣accumarray,除非非常简洁并使用相同的subsand val

0 投票
2 回答
99 浏览

matlab - matlab - 只保留存在 24 个值的天数

假设我有一个数据集:

如何删除所有小于 24 次测量的日期。例如,在第一天只有 23 次测量,因此我需要删除一整天,我怎么能对所有阵列重复此操作?

0 投票
1 回答
312 浏览

matlab - MatLab accumarray 意外更改排序

只要我理解accumarray,它的意思是“制作输出的第n行:1)在sub中找到n。2)如果n在sub中的m1,m2,m3第3个元素中,3)将函数应用于m1,m2 , val 4) 的第 m3 个元素,即输出的第 n 行"

我在某个地方错了吗?

我运行了以下代码。

一个=

U =

九 =

iu =

值 =

潜艇=

r2 =

答案=

答案=

==========================

但我预计r{1} = 11 14 12 10,和r{2} = 10 13

为什么 accumarray 突然改变了排序?

我怎样才能得到预期的结果?

0 投票
2 回答
3521 浏览

matlab - MATLAB:时间序列的 n 分钟/小时/天平均值

这是我在此处发布的一个较早问题的后续行动。根据 Oleg Komarov 的回答,我编写了一个小工具来获取使用 accumarray() 和 datevec() 输出结构的数据的每日、每小时等平均值或总和。随意看看这里(它可能写得不太好,但它对我有用)。

我现在想做的是添加计算 n 分钟、n 小时、n 天等统计数据的功能,而不是像我的函数那样的 1 分钟、1 小时、1 天等。我有一个粗略的想法,就是简单地循环遍历我的时间向量 t(如果我没有了解漂亮的 accumarray(),这几乎是我已经做过的事情),但这意味着我必须做很多对数据间隙、不均匀采样时间等进行错误检查。

我想知道是否有一种更优雅/更有效的方法可以让我重新使用/扩展上面发布的旧函数,即仍然使用 accumarray() 和 datevec() 的方法,因为这使得处理间隙非常容易。

您可以在此处下载我上一个问题中的一些示例数据。这些以 30 分钟的间隔进行采样,因此我想要做的一个可能的例子是计算 6 小时的平均值,而不依赖于它们没有间隙和/或总是在 30 分钟采样的假设。


这是我迄今为止提出的,效果相当不错,除了时间戳的一个小但很容易解决的问题(例如,0:30 代表从 0:30 到 0:45 的时间间隔——我的老不过,函数也遇到了同样的问题):

[ ...请参阅下面的答案...]

感谢木片的启发。

0 投票
1 回答
1003 浏览

matlab - matlab中矩阵值的分组和求和(评估函数)

这里的许多线程表明这accumarray是 matlab 中按索引集对值进行分组(和计算)的答案。由于这工作得又快又好,我需要为更大的(ND)数据字段提供类似的东西。
让我们假设一个例子:我们有一个名字向量,里面有(非唯一的)名字和一个不同项目的收入数据向量列

现在我们要计算每个名称的列总和。
好的,我们可以通过以下方式找出索引

但在那之后,明显的电话

不管用。当然可以在唯一名称或行上使用 for 循环,但这可能有点低效。有更好的想法吗?
另外我试过

但这没有实施并导致

使用 accumarray 时出错
第二个输入 VAL 必须是完整的数字、逻辑或字符向量或标量。

感谢您的想法。

补充:感谢eitan-t的解决方案,该解决方案非常适合该示例。
很遗憾,我的最小工作示例并没有显示所有需求:我想要应用的函数需要一整行或稍后可能需要一个完整的 maxtrix,我需要将其分组到第三个甚至更高的维度。

也许更清楚一点:想想一个M大小矩阵,其中的a x b x c每个条目a对应一个名称左右。最好描述我的需求,例如总结所有唯一名称。
天真的编程将是

这清楚吗?有解决方案吗?