What is the best way to vectorize this matrix problem?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
John Malik
am 27 Apr. 2017
Bearbeitet: Andrei Bobrov
am 28 Apr. 2017
I have a square matrix A which I would like to manipulate using a "map" matrix D. The result will be the matrix B. The entry B(i, j) will be a sum of a number of elements from A(:, j), as determined by D. In the following example, the matrix D tells me that A(1, 1) will be added with A(3, 1) to form B(1, 1), and so on. When the matrices are large, this process takes a long time. Is there a way to vectorize this computation?
A = magic(3); % initial matrix
D = [1, 2, 3; 2, 2, 3; 1, 3, 1]; % map matrix
B = zeros(3); % resultant matrix
for i = 1:3
for j = 1:3
B(D(i, j), j) = B(D(i, j), j) + A(i, j);
end
end
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (1)
Andrei Bobrov
am 27 Apr. 2017
Bearbeitet: Andrei Bobrov
am 28 Apr. 2017
B = accumarray([D(:),repelem((1:size(D,2))',size(D,1))],A(:));
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!