假设我有一个矩阵,其中第一列中的值可能会重复。例如
1 2
3 4
5 6
1 3
Etc...
Run Code Online (Sandbox Code Playgroud)
我想要得到一个矩阵,其中重复项被添加到一行中,第二列是重复行中整体的总和。例如上面的矩阵应该是
1 2+3
3 4
5 6
Etc...
Run Code Online (Sandbox Code Playgroud)
知道如何实现这一点吗?尝试就地编辑或将值复制到新矩阵中会更好吗?
解决你的问题的方法是使用accumarray. 在新数组中累积值是该函数的用例。它会比 for 循环快得多并且更具可读性(嗯,这是有争议的。很多人也觉得它很困难,但一旦你理解了它,它就非常简单并且非常强大):
octave> x = [1 2; 3 4; 5 6; 1 3];
octave> [y, ~, j] = unique (x(:,1));
octave> [y accumarray(j, x(:,2))]
ans =
1 5
3 4
5 6
Run Code Online (Sandbox Code Playgroud)
请注意,即使您的数据不是整数,上述方法也将起作用。这是因为我们使用的是unique(),的最后一个输出j,它们是唯一值数组的索引y。
octave> x = [1.1 2; 1.3 4; 1.5 6; 1.1 3];
octave> [y, i, j] = unique (x(:,1));
octave> [y accumarray(j, x(:,2))]
ans =
1.1000 5.0000
1.3000 4.0000
1.5000 6.0000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |