有条件地同时编辑矢量的多个列

时间:2014-01-15 05:57:25

标签: matlab

所以,假设我有一个< 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 BUT 中有一个范围:

300 193 38.3105400000000    -101.476440000000

由于第4列的值小于-97.2339,因此不满足该行的两个列条件,我想完全删除该行。所以我只希望在第三和第四列同时满足条件的行。

这是我认为有用的东西,但没有(载体被称为'NOAAlatlongdata':

% 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

我也试过使用逻辑索引的方法,但是我不能一次使用逻辑索引来考虑多个列,而且我只能放一个比较运算符&gt;,&lt;,&lt ; =,&gt; =,在逻辑索引中,证明是无益的。

我也尝试在整个矢量中使用逻辑索引仅仅是值范围,但是你很快就会发现这样做只会消除一列中的值,而第一列和第二列将包含在其中。这些列需要保留,但不在条件中考虑。

如果我可以更直接或澄清某些问题,请告诉我,因为我会定期查看。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

我认为这可以按照以下方式完成

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

NOAAlatlongdata(filter,:) = [];

基本上,您为行创建逻辑索引,并删除筛选器选择的每一行。

编辑:对不起,我刚刚复制了你的例子中的逻辑。我已将其更改为排除不在您声明的框中的值。基本上为&交换|