What is the best way to vectorize this matrix problem?

2 ビュー (過去 30 日間)
John Malik
John Malik 2017 年 4 月 27 日
編集済み: Andrei Bobrov 2017 年 4 月 28 日
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

採用された回答

John Malik
John Malik 2017 年 4 月 27 日
This question has been answered here.

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2017 年 4 月 27 日
編集済み: Andrei Bobrov 2017 年 4 月 28 日
B = accumarray([D(:),repelem((1:size(D,2))',size(D,1))],A(:));

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by