Matlab:使用索引增加矩阵值

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)

时间的复杂性对我来说非常重要,我不能用.谢谢.

Lui*_*ndo 6

这是一种方式.我没有计时.

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)