我有一个结构,即<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的镜像字段。
答案 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) )