基于对在 MATLAB 矩阵中添加值
Add values in MATLAB matrix based on pairs
如果之前有人问过类似的问题,我们深表歉意。从表面上看,这似乎应该是一个简单的问题,但我无法描述它——更不用说解决它了!假设我有一个 5 x 3 矩阵,看起来像这样:
A = [50 1 2
75 2 3
20 2 3
10 1 1
90 1 2]
我想对第一列中的值求和,只要第二列和第三列中有一对在其他地方重复。所以,我正在尝试将 A(上图)转换为 3 x 3 矩阵 B,其中:
B = [140 1 2
95 2 3
10 1 1]
仅添加了第 1 列中的值,我需要它们与 "caused" 它们要组合的对保持匹配。我想我还应该补充一点,第 2 列和第 3 列中值的顺序确实很重要,因为 3,4 算作与 4,3 不同的一对。 (当然,我的实际数据包括第 2 列和第 3 列中的值,范围在 100 以内,因此实际上不可能为每种可能的组合编写 if 语句...)
如有任何建议,我们将不胜感激!我正在研究 'find' 上的文档,偶然发现了一个叫做 'ismember' 的东西——我需要使用它的一些应用程序吗?
通常的unique
- accumarray
夫妇适合这份工作:
[u, ~, v] = unique(A(:,2:end), 'rows', 'stable');
B = [accumarray(v, A(:,1)) u];
如果之前有人问过类似的问题,我们深表歉意。从表面上看,这似乎应该是一个简单的问题,但我无法描述它——更不用说解决它了!假设我有一个 5 x 3 矩阵,看起来像这样:
A = [50 1 2
75 2 3
20 2 3
10 1 1
90 1 2]
我想对第一列中的值求和,只要第二列和第三列中有一对在其他地方重复。所以,我正在尝试将 A(上图)转换为 3 x 3 矩阵 B,其中:
B = [140 1 2
95 2 3
10 1 1]
仅添加了第 1 列中的值,我需要它们与 "caused" 它们要组合的对保持匹配。我想我还应该补充一点,第 2 列和第 3 列中值的顺序确实很重要,因为 3,4 算作与 4,3 不同的一对。 (当然,我的实际数据包括第 2 列和第 3 列中的值,范围在 100 以内,因此实际上不可能为每种可能的组合编写 if 语句...)
如有任何建议,我们将不胜感激!我正在研究 'find' 上的文档,偶然发现了一个叫做 'ismember' 的东西——我需要使用它的一些应用程序吗?
通常的unique
- accumarray
夫妇适合这份工作:
[u, ~, v] = unique(A(:,2:end), 'rows', 'stable');
B = [accumarray(v, A(:,1)) u];