2017-04-19 1 views
2
에서 논리 배열에 배열을 매핑

이의이 array a=[1,3,8,10,11,15,24]logical array b=[1,0,0,1,1,1,0,0,0,1,1,1,1,1]을 가정 해 봅시다, [1,1,3,1,3,8,1,3,8,1,2,3,8,10]을 얻는 방법을 참조, a 재설정의 배열 인덱스 그것은 처음부터 같은 곳을 시작 있도록 논리는 처음부터 0 a array 시작되고 b 변경 후 a에 대한 인덱스를 생성하는 arrayfun을 사용하는 경우matlab에

답변

1

1,3,8,10..etc. 당신이 찾을 diff을 사용할 수 있습니다 계속 :

a=[1,3,8,10,11,15,24]; 
b=[1,0,0,1,1,1,0,0,0,1,1,1,1,1]; 
idxs = find(diff(b) ~= 0) + 1; % where b changes 
startidxs = [1 idxs]; 
endidxs = [idxs - 1,length(b)]; 
% indexes for a 
ia = cell2mat(arrayfun(@(x,y) 1:(y-x+1),startidxs,endidxs,'UniformOutput',0)); 
res = a(ia); 
1

하면 루프를 사용하고 b 어레이 상태 (또는 01) 추적 할 수

a = [1,3,8,10,11,15,24]; 
b = [1,0,0,1,1,1,0,0,0,1,1,1,1,1]; 

final = [] 
index = 0; 
state = b(1); 
for i = 1:numel(b) 
    if b(i) ~= state 
     state = b(i); 
     index = 1; 
    else 
     index = index+1; 
    end 
     final = [final, a(index) ]; 
end