2014-01-14 4 views
1

구조체가 <1x1 struct>이고 값을 기반으로 구조체의 필드를 편집하려고합니다. 필드는 GeoDist_Actual이고 구조체는 GeoDist_str입니다. GeoDist_Actual 필드는 <262792x1 double>이며 이는 1.609344e + 05보다 큰 값을 없애기 위해 사용하려고 시도한 코드입니다.구조체에서 특정 값보다 큰 데이터를 제거하십시오.

i =1; 
for i=i:size(GeoDist_str.GeoDist_Actual) 
    if GeoDist_str.GeoDist_Actual(i,1 > 1.609344e+05 
    GeoDist_str.GeoDist_Acutal(i,1) = []; 
    end 
end 

내가 목표로하는 것처럼이 코드를 추가하거나 변경하려면 어떻게해야합니까? 모든 값을 0으로 설정하는 것을 고려했지만 GPS 값을 되찾기 위해 거꾸로 가야합니다. 반대로 Vincenty (구형) 계산을하면 완전히 없애고 싶습니다. if 조건을 준수하지 않는 값.

질문의 범위를 좁힐 수 있으면 알려주세요. 사전에 도와 주셔서 감사합니다.

편집 : 내가

GeoDist_str.GeoDist_Actual(i,1) = 0; 

의 섹션

GeoDist_str.GeoDist_Actual(i,1) = []; 

을 변경할 때 실제로는 아무것도 해결되지 않은 것으로 나타났습니다, 대신하지 않았다 액세스 구조체 "GeoDist_str"의 "GeoDist_Actual"필드에 값이 0 인 미러 필드가 생성되었습니다.

답변

2

이 예제를 고려하십시오 :

% a 10-by-1 vector 
x = [1;2;3;4;5;6;7;8;9;10]; 

% remove entries where the value is less than five 
x(x<5) = []; 

이것은 논리적 인 인덱싱이라고 불리며, 루프가 필요 없습니다.

2

는 다음과 같은 간단한 예를 고려해

A.a = 1:5; 

A = 

    a: [1 2 3 4 5] 

지금 3 모든 요소가 더 큰 삭제를;

A.a = A.a(~(A.a > 3)); 

A = 

    a: [1 2 3] 

또는 대안 :

A.a(A.a > 3) = [] 

사건의 경우는 좀 더 부피의 :

GeoDist_str.GeoDist_Actual = ... 
GeoDist_str.GeoDist_Actual(... 
~(GeoDist_str.GeoDist_Actual > 1.609344e+05)) 
+2

한 두 번째로 날 이길 ... 나는 당신 때문에 생각 단축 된 변수 이름 :-) –

+1

조금 더 읽기 쉽습니다 :'GeoDist_str.GeoDist_Actual (GeoDist_str.GeoDist_Actual> 1.609344e + 05) = [];' –

+0

두 개의 데이터 열에서이 동일한 메서드를 사용하고 이중 종속성을 사용하려면 어떻게해야합니까? 에서와 같이, 나는 하나의 열에 값의 필수 범위와 두 번째 열의 값에 대한 필수 범위를 가졌다. 이 열은 동일한 차원입니다. 262792x1 –