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

 採用された回答

Walter Roberson
Walter Roberson 2012 年 7 月 17 日
mat(r, 2)

3 件のコメント

Juan Pablo
Juan Pablo 2012 年 7 月 17 日
It worked but I didn't understand why should I be cautious. Anyways, thank you very much!
Ryan
Ryan 2012 年 7 月 17 日
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.
Juan Pablo
Juan Pablo 2012 年 7 月 17 日
Interesting, I'll take that into account, thanks

サインインしてコメントする。

その他の回答 (2 件)

Sean de Wolski
Sean de Wolski 2012 年 7 月 17 日
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 件のコメント

Juan Pablo
Juan Pablo 2012 年 7 月 17 日
>> y(:,2) = accumarray(idxu,x(:,2),[],@mean) Index exceeds matrix dimensions.
Juan Pablo
Juan Pablo 2012 年 7 月 17 日
Something didn't work :(
Juan Pablo
Juan Pablo 2012 年 7 月 17 日
But thanks anyway, for your kind support
Sean de Wolski
Sean de Wolski 2012 年 7 月 17 日
What do you have defined as x? If you clear you workspace and copy the above in, it works.
Juan Pablo
Juan Pablo 2012 年 7 月 17 日
Ok I'll try that
Juan Pablo
Juan Pablo 2012 年 7 月 18 日
This helped me a lot more, wish I knew how to use all those functions!
doc unique
doc accumarray
!

サインインしてコメントする。

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 件のコメント

Sean de Wolski
Sean de Wolski 2012 年 7 月 17 日
編集済み: Sean de Wolski 2012 年 7 月 17 日
why not just:
m = mean(x(x(:,1)==1.5,2))
Juan Pablo
Juan Pablo 2012 年 7 月 18 日
row1 doesn't seem to be a legal function on version R2011B
Juan Pablo
Juan Pablo 2012 年 7 月 18 日
but thanks for your support
Walter Roberson
Walter Roberson 2012 年 7 月 18 日
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.
Juan Pablo
Juan Pablo 2013 年 9 月 24 日
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