What is the best way to vectorize this matrix problem?

2 visualizaciones (últimos 30 días)
John Malik
John Malik el 27 de Abr. de 2017
Editada: Andrei Bobrov el 28 de Abr. de 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

Respuesta aceptada

John Malik
John Malik el 27 de Abr. de 2017
This question has been answered here.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 27 de Abr. de 2017
Editada: Andrei Bobrov el 28 de Abr. de 2017
B = accumarray([D(:),repelem((1:size(D,2))',size(D,1))],A(:));

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by