Azzera filtri
Azzera filtri

new array using average row of the old array

1 visualizzazione (ultimi 30 giorni)
I have an array M(1000,1000) and i want to build a new array N(1000,1000), where each element of N has the old value minus the average of its row (in M). If the element is zero no action will be taken. Also, from the average the zeros should be excluded.
Can you help me?
thank you in advance

Risposta accettata

Azzi Abdelmalek
Azzi Abdelmalek il 13 Ott 2013
Modificato: Azzi Abdelmalek il 13 Ott 2013
Edit
out=bsxfun(@minus,M,mean(M,2)).*not(~M)
%or
idx=M==0;
out=bsxfun(@minus,M,mean(M,2));
out(idx)=0
  6 Commenti
Azzi Abdelmalek
Azzi Abdelmalek il 13 Ott 2013
Modificato: Azzi Abdelmalek il 13 Ott 2013
Ok try this
idx=M==0;
moyenne=sum(M,2)./sum(not(~M),2)
out=bsxfun(@minus,M,moyenne)
out(idx)=0
babis
babis il 13 Ott 2013
thanks again this will do it

Accedi per commentare.

Più risposte (1)

Andrei Bobrov
Andrei Bobrov il 13 Ott 2013
ii = M == 0;
out = bsxfun(@minus,M,sum(M,2)./sum(~ii,2));
out(ii) = 0;

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by