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

3 vues (au cours des 30 derniers jours)
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

Réponse acceptée

Walter Roberson
Walter Roberson le 17 Juil 2012
  3 commentaires
Ryan
Ryan le 17 Juil 2012
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 le 17 Juil 2012
Interesting, I'll take that into account, thanks

Connectez-vous pour commenter.

Plus de réponses (2)

Sean de Wolski
Sean de Wolski le 17 Juil 2012
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 commentaires
Juan Pablo
Juan Pablo le 18 Juil 2012
This helped me a lot more, wish I knew how to use all those functions!

Connectez-vous pour commenter.


Elizabeth
Elizabeth le 17 Juil 2012
Modifié(e) : Walter Roberson le 18 Juil 2012
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 commentaires
Walter Roberson
Walter Roberson le 18 Juil 2012
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 le 24 Sep 2013
That is true, thanks for the observation

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by