1

我有一个结构,它是一个<1x1 struct>,我正在尝试根据值编辑结构中的一个字段。字段被调用GeoDist_Actual,结构被调用GeoDist_str。GeoDist_Actual 字段是 a <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 值,进行反向文森特(球形)计算,我想完全摆脱不符合 if 条件的值。

如果我可以缩小问题的范围,请告诉我,并提前感谢您的帮助!

编辑:我注意到当我更改部分时

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

为了

GeoDist_str.GeoDist_Actual(i,1) = 0;

它实际上并没有解决任何问题,而是没有访问结构“GeoDist_str”中的字段“GeoDist_Actual”,它只是创建了一个值为 0 的镜像字段。

4

2 回答 2

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

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

于 2014-01-14T23:36:52.073 回答
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) )
于 2014-01-14T23:36:58.193 回答