How do I extract elements of an array having their indexes in another array?
조회 수: 8 (최근 30일)
이전 댓글 표시
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
채택된 답변
dpb
2018년 2월 20일
편집: dpb
2018년 2월 20일
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!