Mean a matrix columnwise based on another logical matrix

조회 수: 3 (최근 30일)
Giorgos Papakonstantinou
Giorgos Papakonstantinou 2013년 6월 16일
I want to mean the matrix a based on the logical matrix b columnwise: In other words this:
mean(a(b(:,1)))
mean(a(b(:,2)))
...
a =[
7 8 5 3
1 1 4 7
9 3 8 7
10 1 8 2
7 1 2 2
8 9 5 5
8 7 5 10
4 4 7 4
7 10 8 6
2 1 8 3];
b =logical([
0 0 1 0
1 0 1 0
1 0 1 1
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 0 0 1
0 0 0 1]);
  댓글 수: 1
Jan
Jan 2013년 6월 18일
This is obviously an interesting question, which allows to shed light on different powers of Matlab. +1

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

채택된 답변

Jan
Jan 2013년 6월 16일
Or:
m = sum(a .* b, 1) ./ sum(b, 1);
  댓글 수: 4
Wayne King
Wayne King 2013년 6월 17일
I agree Jan, +1, silly of me not to think of simply using the b matrix to get the correct number of nonzero elements.

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

추가 답변 (4개)

Andrei Bobrov
Andrei Bobrov 2013년 6월 17일
편집: Andrei Bobrov 2013년 6월 18일
b1 = bsxfun(@times,b,1:4);
out = accumarray(b1(b),a(b),[],@mean);
or
[~,jj] = find(b);
out = accumarray(jj,a(b),[],@mean);
and in line with accumarray:
out = accumarray(ceil(find(b)/size(b,1)),a(b),[],@mean);
  댓글 수: 2
Giorgos Papakonstantinou
Giorgos Papakonstantinou 2013년 6월 17일
I will celebrate the day that I will understand accumarray... Thank you Andrei
Jan
Jan 2013년 6월 18일
Although I do not think that accumarray is the fastest approach here, I vote for it a sign of my admiration for all successful accumarray masters.

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


Wayne King
Wayne King 2013년 6월 16일
편집: Wayne King 2013년 6월 16일
you mean just:
mean(a.*b)
or do you want the mean of just the nonzero entries? In other words, divide by the right number of elements.
C = a.*b;
for nn = 1:size(C,2)
numelements(nn) = nnz(C(:,nn));
end
colsumz = sum(C);
meanz = colsumz./numelements;

Azzi Abdelmalek
Azzi Abdelmalek 2013년 6월 16일
c=a.*b
c(c==0)=nan;
out=nanmean(c)
  댓글 수: 2
Giorgos Papakonstantinou
Giorgos Papakonstantinou 2013년 6월 17일
Thank you! You had the shortest!
John Doe
John Doe 2013년 6월 18일
Just learned about nanmean. I've been looking for a function like that for quite some time. I've always used some workaround. Thanks!

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


Giorgos Papakonstantinou
Giorgos Papakonstantinou 2013년 6월 17일
Thank you guys!

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by