finding unknown values in a column by using the indices (indexes) of known values.
    10 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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
0 Commenti
Risposta accettata
  Walter Roberson
      
      
 il 17 Lug 2012
        mat(r, 2)
Note: be cautious on those floating point comparisons! http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F
3 Commenti
  Ryan
      
 il 17 Lug 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.
Più risposte (2)
  Sean de Wolski
      
      
 il 17 Lug 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 Commenti
  Elizabeth
      
 il 17 Lug 2012
        
      Modificato: Walter Roberson
      
      
 il 18 Lug 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 Commenti
  Walter Roberson
      
      
 il 18 Lug 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.
Vedere anche
Categorie
				Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!