perform matrix operation without for loop

1 vue (au cours des 30 derniers jours)
SChow
SChow le 25 Sep 2020
Commenté : Ameer Hamza le 25 Sep 2020
I have a matrix (exp_data) of size 25000*45000. I need to perform the following operations as in the code, however with the for loop it takes ~4 hours to operate,
beta is a set of 3 values, for which I need to perform the operations. beta=[0.1, 0.04, 0.6]
any help is much appreciated
for m=1:3
for i=1:25000
for j=1:45000
if exp_data(i,j)>1.5;
xes(i,j)=exp(beta(m).*(exp_data(i,j)));
else xes(i,j)=1;
end;
end
end;
xe(:,:,m)=xes;
end;

Réponse acceptée

madhan ravi
madhan ravi le 25 Sep 2020
Modifié(e) : madhan ravi le 25 Sep 2020
xe = exp(reshape(beta, 1, 1, []) .* exp_data) .* (exp_data > 1.5) + 1 * (exp_data <= 1.5);
% use bsxfun() for implicit expansion in older versions
xe = exp(bsxfun(@times, reshape(beta, 1, 1, []), exp_data)) .* (exp_data > 1.5) + 1 * (exp_data <= 1.5);
  1 commentaire
Ameer Hamza
Ameer Hamza le 25 Sep 2020
Not sure if MATLAB realizes that when (exp_data > 1.5) is 0, it should avoid the corresponding calculations in exp(reshape(beta, 1, 1, []); otherwise, that is just a waste of computation. 🤔

Connectez-vous pour commenter.

Plus de réponses (1)

Ameer Hamza
Ameer Hamza le 25 Sep 2020
Modifié(e) : Ameer Hamza le 25 Sep 2020
Following code is equivalent
xe = zeros([size(exp_data) numel(beta)]);
mask = exp_data > 1.5;
for m = 1:numel(beta)
xes = ones(size(exp_data));
xes(mask) = exp(beta(m).*(exp_data(mask)));
xe(:,:,m) = xes;
end
Not sure if there are any speed improvements since JIT compiler is already claimed to be working very well.
  2 commentaires
madhan ravi
madhan ravi le 25 Sep 2020
I belive your last line should be:
xe(:,:,m) = xes;
Ameer Hamza
Ameer Hamza le 25 Sep 2020
Yes!! Thanks for correction.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by