问题标签 [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.
matlab - 是否有一个 accumarray() 将矩阵作为`val`?
accumarray()的 val
参数必须是向量。在我的情况下,我需要对矩阵的列求和(或平均)。有没有实现这一点的功能或方法?
我现在正在做的是在一个 for 循环中,我分别对列值求和:
matlab - matlab中的accumarray命令
我想通过以下方式执行通常使用循环进行的计算:
而是使用 accumarray 命令:
有人可以指出如何以这种方式计算 N 吗?
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 是正常情况下的第二个元素。
希望我在这里说清楚了。谢谢
arrays - accumarray 中的函数
如果我有一列日期和一列数据,我使用此代码来查找每个日期的数据的累积总和,如第三列所示:
现在我想将一天内的每个数据点除以当天数据的总和。例如:
如果我尝试:
这会将整个第二列除以每个总和。有没有办法限制这一点,以便每天只对第二列的成员进行划分?
matlab - accumarray(subs, val) 其中 val 为零
我有一个 vv
包含每个刻度的市场交易量数据的向量,以及一个minuteIdx
包含不同分钟索引的向量。我accumarray
用来对每分钟内的音量求和,如下所示:
通常它工作得很好,但有时无法在一分钟内获得所有滴答声的体积数据,并且0
体积向量中有s。这导致minuteVolumes
向量比其他情况要短,因为我摆脱了所有的零。例如,如果vv
以 a 开头1
(第一分钟只有一个滴答声),则 minuteVolumes 很175
长,但如果我改为vv
以 a 开头,0
则minuteVolumes
只有174
long。我希望 a0
出现在我的minuteVolumes
向量中,而不是让它更短。有没有聪明的方法来实现这一点?我最初的逻辑是,要进行交易,交易量必须非零,但我没有考虑偶尔出现的不良数据。
matlab - 乐趣取决于 accumarray 中子项和值的顺序
在accumarray()
关于“subs”的第一个注释中,首次出现在 MATLAB R14sp3 文档中,说:
注意 如果 subs 中的下标没有排序, fun 不应该依赖于其输入数据中值的顺序。
我不清楚什么被认为是排序的。认为:
- 应该
subs
在某种意义上排序issorted(subs,'rows')
,或者... - 在线性索引意义上,即
issorted(sub2ind([2 2],subs(:,1), subs(:,2)))
我想依靠:
如果有人还可以提供来自旧版本的示例/测试(以检查向后兼容性),其中例如 1) 为假而 2) 为真,那就太好了。
PS。我对 的替代品大多不感兴趣accumarray
,除非非常简洁并使用相同的subs
and val
。
matlab - matlab - 只保留存在 24 个值的天数
假设我有一个数据集:
如何删除所有小于 24 次测量的日期。例如,在第一天只有 23 次测量,因此我需要删除一整天,我怎么能对所有阵列重复此操作?
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 突然改变了排序?
我怎样才能得到预期的结果?
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 的时间间隔——我的老不过,函数也遇到了同样的问题):
[ ...请参阅下面的答案...]
感谢木片的启发。
matlab - matlab中矩阵值的分组和求和(评估函数)
这里的许多线程表明这accumarray
是 matlab 中按索引集对值进行分组(和计算)的答案。由于这工作得又快又好,我需要为更大的(ND)数据字段提供类似的东西。
让我们假设一个例子:我们有一个名字向量,里面有(非唯一的)名字和一个不同项目的收入数据向量列
现在我们要计算每个名称的列总和。
好的,我们可以通过以下方式找出索引
但在那之后,明显的电话
不管用。当然可以在唯一名称或行上使用 for 循环,但这可能有点低效。有更好的想法吗?
另外我试过
但这没有实施并导致
使用 accumarray 时出错
第二个输入 VAL 必须是完整的数字、逻辑或字符向量或标量。
感谢您的想法。
补充:感谢eitan-t的解决方案,该解决方案非常适合该示例。
很遗憾,我的最小工作示例并没有显示所有需求:我想要应用的函数需要一整行或稍后可能需要一个完整的 maxtrix,我需要将其分组到第三个甚至更高的维度。
也许更清楚一点:想想一个M
大小矩阵,其中的a x b x c
每个条目a
对应一个名称左右。最好描述我的需求,例如总结所有唯一名称。
天真的编程将是
这清楚吗?有解决方案吗?