Sum elements in matrix if equal to value in another element

I have the matrix OVEC, which consists of a number of column vectors with numbers
How do I sum all the elements in each column between row 2 and end if their values are the same as the value in row 1? The procedure should return a row vector of width size(OVEC(1,:))
So if
OVEC = [ 1 2 3 4 5 6
1 1 1 1 1 1
1 6 4 5 5 5
4 4 4 4 4 3];
then I should return the row vector [2, 0, 0, 1, 0]
I tried:
Osumvec = sum(ovec(2:end)==ovec(1,:),1)
But my code is erroneous.

댓글 수: 3

Do you mean sum or count? Your expected output suggests you just want to count the occurrences rather than sum them.
Stephen23
Stephen23 2014년 10월 7일
편집: Stephen23 2014년 10월 7일
OVEC has six columns, but your example output vector only has five. Is [2,0,0,1,1,0] the correct output? (I.e. the count of elements matching the first row?)
Christopher
Christopher 2014년 10월 7일
편집: Christopher 2014년 10월 7일
yes sorry, you are right Stephen.
Adam, I need a count, but I can probably turn a sum into a count by division.
I need a fast vectorized operation for this.

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

답변 (2개)

Stephen23
Stephen23 2014년 10월 7일
편집: Stephen23 2014년 10월 7일
If you want the count:
idx = bsxfun(@eq,OVEC,OVEC(1,:));
sum(idx,1)-1
If you want the sum:
idx(1,:) = false;
sum(OVEC.*idx,1)
Thorsten
Thorsten 2014년 10월 7일
To sum the elements
for i=1:size(ovec, 2)
r(i) = sum(ovec(find(ovec(2:end,i)==ovec(1,i))+1, i));
end
To count the elements
for i=1:size(ovec, 2)
r(i) = sum(ovec(2:end,i)==ovec(1,i));
end

카테고리

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

제품

질문:

2014년 10월 7일

답변:

2014년 10월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by