2014-01-14 53 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) = []; 

GeoDist_str.GeoDist_Actual(i,1) = 0; 

它實際上並沒有解決任何問題,相反,它沒有訪問結構「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由第二打我......我想那是因爲你縮短的變量名稱:-) –

+1

更易讀:「GeoDist_str.GeoDist_Actual(GeoDist_str.GeoDist_Actual> 1.609344e + 05)= [];' –

+0

如果您想在兩列數據上使用相同的方法並且您有雙重依賴關係,該怎麼辦?如在,我有一個列中的值的必要範圍和第二列中的值的必要範圍。這些列是相同的維度:262792x1 –