How to do a quick division between a column array and a matrix?

Hello, All,
I want to divid a column array b (N x 1) by each column in a big sparse matrix A (N x M). My code is as follows:
dividCol = zeros(N,M);
for i = 1 : M
nonCol = find(abs(A(:,i))>0);
dividCol(nonCol,i) = b(nonCol)./A(nonCol,i);
end
But it is very slow. I do know if there exist a faster approach to write this code.
Thanks a lot in advance.
Benson

 採用された回答

Omer Yasin Birey
Omer Yasin Birey 2019 年 1 月 28 日
編集済み: Omer Yasin Birey 2019 年 1 月 28 日

0 投票

Hi Benson, try this
% b = randi(25,25,1);
% A = randi(25,25,5);
[row,col] = find(abs(A(:,:))>0);
dividCol = bsxfun(@rdivide,b(row,1),A(row,col));

3 件のコメント

Benson Gou
Benson Gou 2019 年 1 月 28 日
Hi, Omer,
Thanks for your help. I tested your code and found the following:
A is 7 x 14, b is 7 x 1. But I got dividCol is 61 x 61. The size of dividCol is not correct.
Thanks a lot again,
Benson
Omer Yasin Birey
Omer Yasin Birey 2019 年 1 月 28 日
Yes I checked the code and it does every operation twice. I had to use loop and updated the code. Try it instead.
% b = randi(25,7,1);
% A = randi(25,7,14);
for i = 1:M
nonCol = find(abs(A(:,i))>0);
dividCol = bsxfun(@rdivide,b(nonCol),A(nonCol,i));
end
Benson Gou
Benson Gou 2019 年 1 月 28 日
Omer,
Thanks for your prompt reply.
Is it possible to do this without using a loop? because loop normally takes more time.
Benson

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Sparse Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by