finding unknown values in a column by using the indices (indexes) of known values.

Hello, I'm struggling a lot with some of the indexing methods. Right now I have the next matrix:
1.5000 1.7024
1.5000 1.3119
1.5000 1.3122
0.5000 0.8158
0.5000 1.1760
(it's actually a 200 by 2 matrix, but I have shortened it to make things clearer)
The values in row 1 have been provided by linspace(0.5, 1.5, 5) and the values in row 2 have been entered by the user (they are the user's reaction times, and the latter [the values in col 1] are the stimuli durations).
What I'm trying to do is to find all the user's input when the duration was 1.5000 and find the mean of those values.
So far I used: [r,c]=find(mat==1.5000), and got:
r =
1
2
3
10
17
What I need now is the values next to those rows (that is the ones in col 2) and find their mean.
Hope I was clear and concise. Thanks in advance

 채택된 답변

mat(r, 2)

댓글 수: 3

It worked but I didn't understand why should I be cautious. Anyways, thank you very much!
He is warning you that find(variable == specific number) may not actually return "true" values (matches) that you're expecting because of the reasons outlined in that Matlab Wikia post. It may not apply here, but it's a good tidbit to know about to save yourself potentially from future headaches.
Interesting, I'll take that into account, thanks

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

추가 답변 (2개)

accumarray time! (happy time :) )
x =[1.5000 1.7024
1.5000 1.3119
1.5000 1.3122
0.5000 0.8158
0.5000 1.1760]
[y,~,idxu] = unique(x(:,1)); %indexes of each row into each unique value
y(:,2) = accumarray(idxu,x(:,2),[],@mean) %their mean

댓글 수: 7

>> y(:,2) = accumarray(idxu,x(:,2),[],@mean) Index exceeds matrix dimensions.
Something didn't work :(
But thanks anyway, for your kind support
What do you have defined as x? If you clear you workspace and copy the above in, it works.
This helped me a lot more, wish I knew how to use all those functions!

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

Elizabeth
Elizabeth 2012년 7월 17일
편집: Walter Roberson 2012년 7월 18일
Probably not as efficient as those above, but this is the simplest way I always tried to do it.
j= find(row1==1.5);
for k=1:length(j)
d(k)=c(j(k));
end
meanvalues=mean(d)

댓글 수: 5

why not just:
m = mean(x(x(:,1)==1.5,2))
row1 doesn't seem to be a legal function on version R2011B
but thanks for your support
row1 = mat(:,1);
It is a column, but Elizabeth has called it a row because you confused rows and columns when you phrased the question.
That is true, thanks for the observation

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

카테고리

도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by