2014-03-27 2 views
0

데이터가 서로 다른 실험을 통해 누적되어 있습니다. 이 열 중 하나는 실험 번호이며, 다른 열은 분석해야하는 데이터입니다.중첩 된 슬라이스로 matlab 벡터 인덱싱

데이터에서 분석까지 나는 부분적으로해야하고, 하나의 실험을 위해서 나는 시작해야하는 곳과 끝내야 할 곳의 색인을 알고 있습니다. 내 데이터가 분석을위한 것인지 아니면 하나의 논리 벡터를 만들 것인지 묻습니다. 일례로서

는 :

a = [8 8 8 6 6 6 8 8 8 8 8 5 5 5 5 8 8 ]'; 
b = [2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3]'; 

I가 필요한 데이터 벡터 a이다 b 실험 번호이다. 간단하게 만들어가 생각

b2_lower = 3; % index where analysis should start 
b2_upper = 5; % index where analysis should end 
b3_lower = 4; 
b3_upper = 7; 

: 출력 제공

logicalINeed = [0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 ]; 
dataFroAnalysis = a(logicalINeed==1)' 

:

dataFroAnalysis = 

    6  6  6  5  5  5  5 

내가 각 실험뿐만 완전하지 쌓인 열 인덱스를 알고 내가 마무리해야 0이 범위 내에 있으면 0으로 변경하고

c = zeros([length(a),1]); 
c(b==2(b2_lower:b2_upper)) = 1; 
c(b==3(b3_lower:b3_upper)) = 1; 

분명히 이것이 제대로 작동하지 않습니다. 나는 for 루프를 구현하려고하지만 많은 카운터와 효율성을 전혀 얻지 못한다. 원래의 데이터는 500,000 가지 이상의 실험을 통해 100,000 개가 넘는 항목입니다.

이렇게 간단한 인덱싱 방법이 있습니까?

답변

1

먼저 ab 벡터를 만드는 방법을 살펴 보겠습니다. 초기 단계에서 나중에 처리하는 것을 더 쉽게 할 수있는 방법이 있습니까? 처음부터 인덱스 값을 어디에서 얻을 수 있습니까? 각 실험의 예 시작 (기본 ia으로

[c, ia, ic ] = unique(b); 

는 각각의 고유 한 값의 첫 번째 위치를 포함

당신은 당신의 데이터 형식을 변경할 수 없다는 가정뿐만 아니라 b의 숫자가 연속 블록에 있는지 세트). 따라서 운동 할 수있는 색인 값 오프셋 : boffest(n)c(n) 실험에 관한 인덱스 오프셋

boffset = ia-1; 

.

인덱스 값의 저장 방법에 따라 오프셋을 사용하여 해당 값이 전체 열의 어디에 있는지 알아낼 수 있습니다.

0

내가 모르는 부분을 잘 모르겠지만 도움이 될만한 몇 가지 사항이 있습니다.

첫째, 당신은 다음과 같이 논리적 표현과 색인 작업을 수행 할 수 있습니다

index_where_5 = find(a==5); 
index_where_6 = find(a==6); 

index_where_5_or_6 = union(index_where_6, index_where_5); 

dataFroAnalysis = a(index_where_5_or_6) 

dataFroAnalysis = 

    6  6  6  5  5  5  5 
:

dataFroAnalysis = a(a~=8) 

dataFroAnalysis = 

    6  6  6  5  5  5  5 

둘째, 당신은 "노동 조합"또는 "교차"와 함께 유용한 "찾기"명령을 찾을 수 있습니다

+0

감사합니다. 나는 벡터를 예제 목적으로 만주고 단순함을 위해서이 세 가지 값을 가진다. 필자의 목표는 벡터 b와 인덱스 bn_lower, bn_upper의 값만을 기반으로하는 논리 벡터를 얻는 것이다. 원래 문제에서는 a의 값에 대해 색인을 생성 할 수 없습니다. – tomasz74