2016-08-03 17 views
0

Ich habe zwei große ArraysWie bekomme ich Indizes, wo zwei Arrays gleich sind?

t = 0: 5e-4 : 1

f = @(t) some function

Sie sind zu groß für eine bestimmte Analyse, so stattdessen würde Ich mag von jedem von ihnen probieren, so dass die abgetasteten Array wie

aussehen würde

t_sampled = 0:5e-2:1

würde Ich mag, dies zu erreichen, indem der Index bekommen, wo t==t_sampled. So kann ich nur sagen, dass t_sampled = t(idx)

Wie kann ich das tun?

+1

Warum nicht einfach 't_sampled' direkt in' f'? – edwinksl

Antwort

0

Ihre Frage ist nicht ganz klar, aber wie es scheint, datasample wird die Lösung geben:

t = 0:5e-4:1; 
p = 0.01;  % the proportion of t to sample [0..1) 
t_sampled = datasample([t; 1:length(t)].',floor(length(t)*p),'Replace',false); 
t_ind = t_sampled(:,2) 

jetzt, t_ind wird der Index des abgetasteten t sein.

gibt es eine andere, einfachere Option ohne datasample:

t_ind = (randperm(length(t),floor(length(t)*p))) % indecies 
t_sampled = t(t_ind) % values that was sampled 

Ist das, was Sie suchen?

+0

Wenn Sie Toolbox-Funktionen in Ihrer Antwort verwenden, sollten Sie wahrscheinlich die Leute im Voraus sagen. – excaza

+0

Entschuldigung, ich wusste nicht, dass es eine Toolbox ist, wenn Sie sie installiert haben, sehen Sie nicht wirklich, woher sie kommt, und es gibt keinen Sinn, sich daran im wirklichen Leben (d. H. Außerhalb von SO) zu erinnern. Ich füge eine Antwort ohne Werkzeugkastenfunktionen hinzu. – EBH

+0

Ich wusste nicht, dass es ein Leben außerhalb von SO gab, bitte erzähl mir mehr! – excaza

1

Grundsätzlich Sie für jedes Element von t_sampled der Index k in t zu finden, wo t[ii] - t_sampled[k] minimal ist. Wenn die Arrays ungeordnet waren, würden Sie allgemein sein und alle Elemente vergleichen:

[~, idx] = min(abs(bsxfun(@minus, t', t_sampled))); 

jedoch seit t streng monoton ist, können Sie einfach interp1 auf den Indizes verwenden 1:numel(t):

idx = interp1(t, 1:numel(t), t_sampled, 'nearest'); 

oder sogar direkt auf die gewünschten Werte:

f_sampled = interp1(t, ft, t_sampled, 'nearest');