Is it possible to vectorize this ?

3 vues (au cours des 30 derniers jours)
Omar Ali Muhammed
Omar Ali Muhammed le 26 Avr 2021
Modifié(e) : Matt J le 26 Avr 2021
A matrix A(100x1000) a selective column defined in B(1x1000). The required processing is the mean of non zero elements of each column of A referenced by B. Without the use of loops.
Regards

Réponse acceptée

Matt J
Matt J le 26 Avr 2021
Modifié(e) : Matt J le 26 Avr 2021
A(~A)=nan;
result=mean(A(:,B),1,'omitnan')
  2 commentaires
Omar Ali Muhammed
Omar Ali Muhammed le 26 Avr 2021
Dear, it is wonderful.
How can we 'omitnan' if we replace mean by trimmean?
Matt J
Matt J le 26 Avr 2021
Modifié(e) : Matt J le 26 Avr 2021
Dear, it is wonderful.
I'm very glad. Please Accept-click the answer to indicate so.
How can we 'omitnan' if we replace mean by trimmean?
What would you be excluding?Zeros again? If so,
A(~A)=inf;

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 26 Avr 2021
AB = A(:, B);
result = sum(AB, 1) ./ sum(AB ~= 0, 1);
mean('omitnan') replaces the NaNs by zeros for the summation and calculates the number of non-NaNs by sum(~isnan(AB)). Therefore this code should be faster, because it avoids replacing zeros by NaNs and back to zeros again.
  1 commentaire
Matt J
Matt J le 26 Avr 2021
Modifié(e) : Matt J le 26 Avr 2021
because it avoids replacing zeros by NaNs and back to zeros again.
+1. Although, I would argue, they probably should have been NaNs instead of zeros from the very beginning.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by