从结构中删除大于某个值的数据

时间:2014-01-14 23:16:35

标签: matlab matlab-struct

我有一个结构,即<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”中没有访问“Ge​​oDist_Actual”字段,它只是创建了一个值为0的镜像字段。

2 个答案:

答案 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) = [];

这称为逻辑索引,不需要循环。

答案 1 :(得分: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) )