fastest way to apply A\B on each matrix page

1 回表示 (過去 30 日間)
hosein Javan
hosein Javan 2020 年 8 月 17 日
コメント済み: hosein Javan 2020 年 8 月 17 日
I would like to find an efficient fast way for calculating:
for i = 1:n
X(:,:,i) = A(:,:,i)\B(:,:,i)
end
where A and B are 10*10*n, and 10*1*n size matrices respectively. the matrices are large and must be called meny times. therefore I was thinking of replacing "for loops" with a faster way that does it very fast and not iteratively.

採用された回答

Bruno Luong
Bruno Luong 2020 年 8 月 17 日
編集済み: Bruno Luong 2020 年 8 月 17 日
Why insist on ARRAYFUN, your for-loop is perfectly fine. ARRAYFUN is a "vectoriztion" scam.
n = 100;
A = rand(10,10,n);
B = rand(10,1,n);
X = arrayfun(@(p) A(:,:,p)\B(:,:,p), 1:n, 'unif', 0);
X = cat(3,X{:});
  5 件のコメント
hosein Javan
hosein Javan 2020 年 8 月 17 日
Bruno Luong. sorry for misunderstanding. I did not mean to decieve. I only thought that arrayfun is a best replace for "loop". I'll edit the question.
hosein Javan
hosein Javan 2020 年 8 月 17 日
I studied your MultiSolver. it was using concatenation diagonally and make a sparse matrix as I said. I see there's no better way. however ur using of repmat and rehsape was something speedy to extract unknowns without loops. I accept your answer. thanks, but I'd like to mention once more that it was misunderstanding. please don't use words like "big scam". thanks again.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOperating on Diagonal Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by