Effacer les filtres
Effacer les filtres

What is the best way to vectorize this matrix problem?

1 vue (au cours des 30 derniers jours)
John Malik
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

Réponse acceptée

John Malik
John Malik le 27 Avr 2017
This question has been answered here.

Plus de réponses (1)

Andrei Bobrov
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(:));

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!

Translated by