new array using average row of the old array

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

 채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2013년 10월 13일
편집: Azzi Abdelmalek 2013년 10월 13일

1 개 추천

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

babis
babis 2013년 10월 13일
thank you for your answer but with this commands the average of the row also counts the elements with zero value and i want them to be excluded.
Do you want to exclude all the rows with zeros
If you want to exclude all the rows with zeros
idx=any(~M,2)
out=bsxfun(@minus,M,mean(M,2))
out(idx,:)=M(idx,:)
babis
babis 2013년 10월 13일
dear azzi i want to exclude the zeros when calculating the average. for example in a row like [1 4 7 3 0 0 2 1] the average will be 18/6=3 not 18/8=2.25 thank you again
Azzi Abdelmalek
Azzi Abdelmalek 2013년 10월 13일
편집: Azzi Abdelmalek 2013년 10월 13일
Ok try this
idx=M==0;
moyenne=sum(M,2)./sum(not(~M),2)
out=bsxfun(@minus,M,moyenne)
out(idx)=0
babis
babis 2013년 10월 13일
thanks again this will do it

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Andrei Bobrov
Andrei Bobrov 2013년 10월 13일

0 개 추천

ii = M == 0;
out = bsxfun(@minus,M,sum(M,2)./sum(~ii,2));
out(ii) = 0;

카테고리

도움말 센터File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

질문:

2013년 10월 13일

댓글:

2013년 10월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by