2014-01-15 56 views
0

所以,假設我有一個向量,它的維度爲double>> < 262792x4 double>。第一列和第二列是組織所必需的(它們表示網格上的點),並且接下來的兩列數據分別是緯度和經度。有條件地同時編輯一個向量的多列

例如:

1 1 12.1899300000000 -133.458980000000 
2 1 12.2198400000000 -133.353880000000 
3 1 12.2496700000000 -133.248720000000 
4 1 12.2794300000000 -133.143550000000 
5 1 12.3091000000000 -133.038270000000 

我希望有條件獲得在緯度和經度值的範圍不符合列擺脫行。

舉例來說,我想在第三和第四列(37.7462 在這種情況下一個範圍:

300 193 38.3105400000000 -101.476440000000 

由於該行兩列條件不由於第四列的運動值小於-97.2339,所以我希望完全刪除該行,所以我只想在第三列和第四列同時滿足條件的行。這是我認爲會有用的東西,但沒有(該向量被稱爲'NOAAlatlonglongdata':

% Lat/Long Value Box Truncation 

% Upper Right Box lat/long (in decimal form) 
latUR= 39.4993; 
longUR= -93.2339; 

%Lower Left Box Point lat/long (in decimal form) 
latLL = 37.7462; 
longLL = -97.3453; 

%Upper Left Box Point 
latUL= latLL; 
longUL = longUR; 

%Lower Right Box Point 
latLR = latUR; 
longLR = longLL; 

%Latitude range in the box is going to go from latLL to latUR 
%Longitude range is going from longUR to longLL 

i = 1; 
for i=i:262792 
    if (NOAAlatlongdata(i,3) > latUR) && (NOAAlatlongdata(i,3) <latLL) &&  (NOAAlatlongdata(i,4) > (longUR)) && (NOAAlatlongdata(i,4) <(longLL)) 
    NOAAlatlongdata(i,1) = []; 
    NOAAlatlongdata(i,2) = []; 
    NOAAlatlongdata(i,3) = []; 
    NOAAlatlongdata(i,4) = []; 
    end 
end 

我還試圖用邏輯索引的方法,但我不能得到在與邏輯索引時考慮多列,而我只能沒有把一個比較運營商>,< ,< =,> =,在邏輯索引中,這被證明是無益的。

我已經使用邏輯索引橫跨整個矢量只是數值範圍也試過,但你很快就會發現這樣做將擺脫只值一列與第一和第二列將包括在的。這些列將需要保留,但不在條件中考慮。

如果我可以讓這個問題更直接或澄清一些事情,請讓我知道,因爲我會定期檢查這個問題。

非常感謝您的幫助。

回答

2

我認爲這是可以如下

filter = NOAAlatlongdata(:,3) < latLL | NOAAlatlongdata(:,3) > latUR |... 
     -NOAAlatlongdata(:,4) < longLL | -NOAAlatlongdata(:,4) > longUR; 

NOAAlatlongdata(filter,:) = []; 

基本上你創建一個邏輯索引行,並刪除由過濾器選擇的每一行來完成。

編輯:對不起,我剛剛複製了你的例子中的邏輯。我已將其更改爲排除不在您聲明的框中的值。基本上換&|

+0

不幸的是,這並沒有奏效。這是一個包含數據向量的「.mat」文件。 https://www.dropbox.com/s/tsri4o2a19vcwhz/NOAAlatlongdata.mat 我最終得到了一個<262792x1邏輯>全部爲零 –

+0

我不確定你想要做什麼工作。我可以確認是否要排除所有'lat> latUR','lat longUR'和'long MrAzzaman

+0

是的,那是對的。看起來您的代碼中列出了您提供的內容。我不確定它爲什麼不起作用。 –

相關問題