Effacer les filtres
Effacer les filtres

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

4 vues (au cours des 30 derniers jours)
Benson Gou
Benson Gou le 28 Jan 2019
Commenté : Benson Gou le 28 Jan 2019
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

Réponse acceptée

Omer Yasin Birey
Omer Yasin Birey le 28 Jan 2019
Modifié(e) : Omer Yasin Birey le 28 Jan 2019
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 commentaires
Omer Yasin Birey
Omer Yasin Birey le 28 Jan 2019
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 le 28 Jan 2019
Omer,
Thanks for your prompt reply.
Is it possible to do this without using a loop? because loop normally takes more time.
Benson

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Denoising and Compression dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by