问题标签 [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 回答
344 浏览

matlab - `accumarray` 对其函数参数进行异常调用

精简版:

作为第四个参数传递的函数accumarray有时会使用与编码的第一个参数的规范不一致accumarray的参数调用。

因此,用作参数的函数accumarray必须测试实际上是什么异常情况。

问题是:1 表达式匿名函数如何测试这种异常情况?更一般地说:如何编写对accumarray的未记录行为具有鲁棒性的匿名函数?


完整版本:

下面的代码是我今天大部分工作时间的问题的一个彻底提炼的版本。

首先是一些定义:

注意vals1vals0通过交换元素 2 和 8 获得的。“匿名”函数anon计算其输入的非无限元素中的最大值。

鉴于这些定义,下面的两个调用

仅在它们的第二个参数(vals0vs )上有所不同,应该产生相同的结果,因为和vals1之间的差异仅影响对其中一个调用的参数中值的顺序,并且此函数的结果对 的顺序不敏感论据中的元素。vals0vals1anon

事实证明,这两个表达式中的第一个可以正常计算并产生正确的结果1

然而,第二个失败了:

为了解决这个问题,我能想出的只是写一个单独的函数在它自己的文件中,当然是“MATLAB方式”)

...并运行以下内容:

accumarray上面最后一次调用的输出可以看出,第二次调用kluge回调的参数是数组[Int]。这毫无疑问地告诉我,accumarray它的行为与记录的3不同(因为idxs没有指定长度为 1 的数组要传递给accumarray' 的函数参数)。

事实上,从这个和其他测试中,我确定,与我的预期相反,传递给的函数accumarray被调用超过max(idxs)(= 3) 次;在上面涉及的表达式中kluge,它被称为 5 次。

这里的问题是,如果不能依赖accumarray's 函数参数的实际调用方式,那么使该函数参数健壮的唯一方法是在其中包含许多额外的代码来执行必要的检查。这几乎肯定会要求函数有多个语句,这排除了匿名函数。(例如,上面的函数kluge比 更健壮anon,但我不知道如何适应匿名函数。)不能使用匿名函数accumarray大大降低了它的效用。

所以我的问题是:

如何指定可以作为健壮参数的匿名函数?accumarray


1在这篇文章中显示的所有 MATLAB 输出中,我已从 MATLAB 的典型过度填充中删除了空白行。
2我欢迎您提出任何其他故障排除建议;解决这个问题比它应该的要困难得多。
3 特别是,请参阅“函数按如下方式处理输入:”行之后的第 1 到第 5 项。

0 投票
3 回答
1230 浏览

arrays - 如何快速获得多重性数组

获取数组A并输出unique(A)[即 的唯一数组元素的集合A] 以及将 in 的第 i 个条目的第 i 个多重性放在其第 i 个位置的多重性数组unique(A)的最快方法是什么A

这是一口,所以这里有一个例子。鉴于A=[1 1 3 1 4 5 3],我想要:

  1. unique(A)=[1 3 4 5]
  2. mult = [3 2 1 1]

这可以通过一个乏味的 for 循环来完成,但想知道是否有办法利用 MATLAB 的数组特性。

0 投票
2 回答
106 浏览

matlab - Accumarray 如何设置“有趣”以仅使用每个 bin 的最后一个 obs

有没有办法让accumarray除每组的最后一个观察之外的每一个观察都放弃?

我想到的是类似的东西:

举个例子,假设我有以下内容:

我实际上只是在考虑,accumarray因为我只是用它来计算每个箱的观察平均值。所以每一个能成功的功能对我来说都很好。

0 投票
4 回答
903 浏览

matlab - 通过仅保留第 1 列中在第 2 列中具有最大值的条目来删除数组第 1 列中的重复项

我有一个 X 2 矩阵,它是通过将许多矩阵附加在一起而形成的。矩阵的第 1 列由指示 item_ids 的数字组成,第 2 列由相似度值组成。由于该矩阵是通过将许多矩阵连接在一起形成的,因此第 1 列中可能存在我不想要的重复值。我想删除第 1 列中的所有重复值,这样对于第 1 列中存在重复的任何值 X ,矩阵的所有行都被删除其中 column 1 = X ,除了矩阵的行1 = X 和 column2 值是矩阵中所有 X 值中的最大值。

通过删除 n X 2 矩阵中的所有行获得,其中第 1 列中的重复值在第 2 列中没有最大值。

0 投票
0 回答
77 浏览

matlab - 将函数迭代地应用于数组片段

所以我有这个可爱的漂亮函数,它需要两个输入:价格向量和日期向量:

现在我有涵盖很长一段时间的向量价格和日期时间,比如说 20 天,我想计算每天的前一个函数。每天的观察次数是随机的,但我可以轻松找到当天的最后一次观察。

所以我在想,有没有办法在两个向量的每一部分上运行一个函数(迭代地)?或者我应该把我的两个向量分成几块并在每一块上运行函数?

谢谢大家

0 投票
4 回答
2813 浏览

matlab - MATLAB Accumarray 加权平均值

所以我目前正在使用“accumarray”来查找与匹配 ID 相对应的一系列数字的平均值。防爆输入:

我当前的代码使用 ID 作为“分隔符”找到上述值的未加权平均值,这样我就不会将所有值的平均值作为一个数字,而是仅将具有相应 ID 的值的结果分开. 前输出:

为此,我正在使用以下代码:

StarData2 是函数的输入。到目前为止,这对我的目的来说非常有效,我需要知道是否可以让 accumarray 给我一个加权平均值,以便可以为应用程序中的每个点(在找到平均值之前)分配一个权重,或者 @mean 可以替换为可以实现此目的的功能。新输入将如下所示:

新代码必须执行 sum(val(i)*weight(i))/sum(weight) 而不仅仅是标准平均值。感谢您的任何帮助。

0 投票
1 回答
110 浏览

matlab - matlab中未排序数据的扩展accumarray输出

我正在使用 accumarray 函数对向量“id”定义的类别中的向量“数据”中的值求和。我希望我的向量 id 不一定要排序,也可能包含不连续的数字。我还想得到一个与 id 大小相同(而不是 unique(id) 大小)的和 Sij 向量。

例如

作为我想要的输出

我设法通过创建数据集并使用连接函数(使用以下代码)来做到这一点,但我想知道是否有更有效的方法(这是我正在最大化的似然函数的一部分,我想加快速度)。谢谢!

0 投票
3 回答
630 浏览

matlab - 使用 accumarray 和 @min 从组中提取 min,但也从另一个变量/列输出相应的值

我有 3 列数据:

我正在使用以下内容来提取每个类别的最小数据值:

哪个输出:

但是,我真的很想有一个输出也告诉我最小值来自哪个时间点,例如

或者,我希望在他们自己的向量中输出最小值,对于不是其组的最小值的任何行,使用 NaN,例如

任何一种方法都可以解决我的问题。作为一个 Matlab 新手,我很难知道要搜索哪些术语。

0 投票
2 回答
1395 浏览

matlab - MATLAB 中忽略 NaN 的累积行值的平均计算

我正在寻找有关如何优雅地解决以下问题的建议。尽管在我的具体情况下性能不是问题,但我会感谢有关良好实践的评论。

提前致谢!

简短版本:

我试图根据一些逻辑对矩阵行进行平均,同时忽略 NaN 值。我目前拥有的代码没有按照我想要的方式处理 NaN 值。

长版:

我的数据是按以下方式构建的:

  • 单个(第一)列“箱”。每个 bin 的行数不是恒定的。箱不必是整数。行是预先排序的。
  • 可变数量的数据列,可能包括 NaN。

这是一个例子:

所需的结果是一个矩阵,其中包含第一列中唯一的“bins”,其余部分表示“未被 NaNs 破坏”,例如:

  • 如果对于特定列+bin,只有 NaN(在上面的示例中:第一个数据列+bin 210) - 结果将是 NaN。
  • 如果对于特定的列+bin,存在 NaN 和数字的混合,则结果将是有效数字的平均值。在上面的例子中:第一个数据列+bin 200 应该给出(0.720+0.706+0.693)/3=0.7063——注意这个列+bin 除以 3(而不是 4)。

这是上述示例的预期结果:

到目前为止我尝试了什么:

这是我设法从多个来源编译的一些代码。它适用于仅包含 NaN 或数字的 column+bin。

这是我目前得到的:

ps

  1. 如果有任何机会使用电子表格软件(如 MS Excel)更容易做到这一点 - 我很想听听想法。
  2. 在每列的基础上进行计算是我目前关于如何处理这个问题的想法。我只是想知道是否有一种方法可以概括它以立即获取完整的矩阵。
0 投票
1 回答
410 浏览

matlab - Matlab中使用accumarray对数据求和

我有一个这样的矩阵:

如果它们的第一列相同,我想获得第二列数据的总和。例如,我想要:

所以我尝试了

但它没有用。我应该怎么办?