What is the best way to vectorize this matrix problem?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
John Malik
le 27 Avr 2017
Modifié(e) : Andrei Bobrov
le 28 Avr 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 commentaires
Réponse acceptée
Plus de réponses (1)
Andrei Bobrov
le 27 Avr 2017
Modifié(e) : Andrei Bobrov
le 28 Avr 2017
B = accumarray([D(:),repelem((1:size(D,2))',size(D,1))],A(:));
0 commentaires
Voir également
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!