use*_*927 4 matlab increment matrix
我有一个索引向量,并希望在每个索引中增加矩阵中的值.例如:
ind = [1 2 2 5];
m = zeros(3);
m(ind) = m(ind) + 1;
Run Code Online (Sandbox Code Playgroud)
结果如下:
m = [1 0 0
1 1 0
0 0 0]
Run Code Online (Sandbox Code Playgroud)
但我需要结果
m = [1 0 0
2 1 0
0 0 0]
Run Code Online (Sandbox Code Playgroud)
时间的复杂性对我来说非常重要,我不能用.谢谢.
这是一种方式.我没有计时.
ind = [1 2 2 5];
N = 3;
m = full(reshape(sparse(ind, 1, 1, N^2, 1), N, N));
Run Code Online (Sandbox Code Playgroud)
同样,你可以使用
ind = [1 2 2 5];
N = 3;
m = reshape(accumarray(ind(:), 1, [N^2 1]), N, N);
Run Code Online (Sandbox Code Playgroud)
或其变化(感谢@beaker)
ind = [1 2 2 5];
N = 3;
m = zeros(N);
m(:) = accumarray(ind(:), 1, [N^2 1]);
Run Code Online (Sandbox Code Playgroud)
这个可能比其他人慢:
ind = [1 2 2 5];
N = 3;
m = zeros(N);
[ii, ~, vv] = find(accumarray(ind(:), 1));
m(ii) = vv;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |