How do I extract elements of an array having their indexes in another array?
34 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Carlos Goncalves Moreira
am 20 Feb. 2018
Bearbeitet: dpb
am 20 Feb. 2018
I have two arrays: one with data points ( b, averaged every n points from a longer array a) and another one with specific indexes ( idx) that I got from a previous classification function of these data points ( P).
Please check my code:
n = 24459; % average every n values
a = data.streams.EMGP.data; % original array
b = arrayfun(@(i) mean(a(i:i+n-1)),1:n:length(a)-n+1)'; % the averaged vector
filename= 'stim_rat36_20180209_3_predictions';
[~,~,PP]=xlsread(filename,'C1:C5451');
P = str2double(PP); %classification for each data point
idx=0; %get the index of all values classified in category 1.
for i = 1: length(P)
if P(i)==1
idx = [idx,i];
end
end
EMGP=zeros(size(idx));
for j = 1: length(idx)
EMGP=b(idx(j));
end
In array idx, I have the positions of all datapoints of b that are classified in category 1. I want to creat a new array, EMGP, with all these specific values from b with indexes stated in idx. Then, I want the average value of EMGP.
How can I do this? Something is wrong if my loop while creating EMGP.
Please help. Thank you all!
0 Kommentare
Akzeptierte Antwort
dpb
am 20 Feb. 2018
Bearbeitet: dpb
am 20 Feb. 2018
Instead of looping, just use Matlab logical indexing...your solution should look like
idx=[]; %get the index of all values classified in category 1.
for i = 1: length(P)
if P(i)==1, idx = [idx,i]; end
end
because your way has a zero element which is invalid array index.
"The Matlab way" is simply
EMGP=b(P==1);
3 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!