2012-06-01 1 views
1

단순화 버전처럼 보이는 다수의 입자의 궤적의 좌표- 단순 매트릭스 필터링 I은 X 및 Y에 대한 정보를 저장하는 huuuge 행렬이 그룹 크기

COL 1- 트랙 번호; col 2- 프레임 번호; col 2 좌표 X;

B = 

1 1 5.14832 3.36128 
1 2 5.02768 3.60944 
1 3 4.85856 3.81616 
1 4 5.17424 4.08384 
2 1 8.19648 5.31056 
2 2 8.04848 5.33568 
2 3 7.82016 5.29088 
2 4 7.80464 5.31632 
2 5 7.68256 5.4624 
2 6 7.62592 5.572 

:

A = 
1 1 5.14832 3.36128 
1 2 5.02768 3.60944 
1 3 4.85856 3.81616 
1 4 5.17424 4.08384 
2 1 2.02928 18.47536 
2 2 2.064 18.5464 
3 1 8.19648 5.31056 
3 2 8.04848 5.33568 
3 3 7.82016 5.29088 
3 4 7.80464 5.31632 
3 5 7.68256 5.4624 
3 6 7.62592 5.572 

가 지금은 4 말과 (궤도의 노트 번호를 다시 매기)와 같은 물건을 나머지 유지 할 수 있습니다보다 짧은 궤도를 필터링 할 : COL 3- Y

예를 들어

좌표 그것을 효율적으로하는 방법? for 루프와 vertcat을 사용하는 아이디어에 대해 생각할 수 있지만 가장 느린 솔루션은 다음과 같습니다./

고마워요!

+0

당신은 무엇을 2보다 짧은 궤적을 의미합니까? –

+0

아, 미안해. :) 물론, f.ex보다 짧아. 4 = 4 프레임 미만의 궤적 – Art

+0

이 행렬은 정보를 저장하는 데 매우 비효율적 인 방법입니다. 비록 당신이 단지 그것을 나눠서 "작은"매트릭스를 셀에 저장했다 할지라도, 결과의 "필터링"은 사소할 것입니다. – bdecaf

답변

2

이 4보다 작은 길이의 그 궤적을 걸러 :

[v, u1, w] = unique(A(:, 1), 'last'); 
[~, u2, ~] = unique(A(:, 1), 'first'); 
keys = v(find(u1 - u2 >= 3)); 
B = A(ismember(A(:, 1), keys), :); 

이 의지를 다시 번호 그들 :

여기
[~, ~, B(:, 1)] = unique(B(:, 1)); 
+0

감사합니다! 매력처럼 작동합니다. – Art

+0

당신은 천만에 - 행운을 빌어 요! – Ansari

1

@Ansari보다 약간 다른 해결책 :

t = 1:max(A(:,1));     %# possible track numbers 
tt = t(histc(A(:,1),t) >= 4);  %# tracks with >= 4 frames 
B = A(ismember(A(:,1),tt),:);  %# filter rows 
[~,~,B(:,1)] = unique(B(:,1));  %# renumber track numbers 

위의 내 코드에서 tt 변수 인덱스를 계산하는 또 다른 방법 :

tt = find(accumarray(A(:,1), 1, [], @(x)numel(x)>=4)); 
관련 문제