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

 采纳的回答

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 个评论

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
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
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 中查找有关 Electrophysiology 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by