删除数组元素如果是满足一定条件的for循环

41视图(30天)
我试图使用一个for循环查找的值在-2.5到2.5之间的前两列矩阵和删除所有矩阵的行情况时会见了值在-2.5到2.5之间。我只是试图忽视这些数据点。有一个负数的方法吗?
JDF = [CorrCKASRoll1 CorrCKASPitch1、CorrJoystickRoll1 CorrJoystickPitch1);
CKASR = JDF (: 1);
CKASP = JDF (:, 2);
x =大小(CKASR);
值= 0 (x);
i = 1:长度(CKASR)
如果((CKASR (i) > = -2.5) & & (CKASR(我)< = 2.5))& & ((CKASP (i) > = -2.5) & & (CKASP (i) < = 2.5))
值= [];
结束
价值;
结束

接受的答案

沃斯
沃斯 2022年6月6日
这里有一个方法,使用一个for循环:
JDF = [CorrCKASRoll1 CorrCKASPitch1、CorrJoystickRoll1 CorrJoystickPitch1);
CKASR = JDF (: 1);
CKASP = JDF (:, 2);
x =元素个数(CKASR);
to_remove = false (x, 1);
i = 1: x
如果((CKASR (i) > = -2.5) & & (CKASR(我)< = 2.5))& & ((CKASP (i) > = -2.5) & & (CKASP (i) < = 2.5))
to_remove (i) = true;
结束
结束
%从CKASR CKASP:删除行
CKASR (to_remove:) = [];
CKASP (to_remove:) = [];
%和/或删除行从JDF本身:
JDF (to_remove:) = [];
但是,它是更高效的使用逻辑索引而不是一个for循环(注意:您必须使用 & 而不是 & & 向量):
JDF = [CorrCKASRoll1 CorrCKASPitch1、CorrJoystickRoll1 CorrJoystickPitch1);
CKASR = JDF (: 1);
CKASP = JDF (:, 2);
to_remove = (CKASR > = -2.5) & (CKASR < = 2.5) & (CKASP > = -2.5) & (CKASP < = 2.5);
%从CKASR CKASP:删除行
CKASR (to_remove:) = [];
CKASP (to_remove:) = [];
%和/或删除行从JDF本身:
JDF (to_remove:) = [];
另外,请注意, ((CKASR > = -2.5) & & (CKASR < = 2.5)) 相当于 abs (CKASR) < = 2.5 (如果 CKASR 是真实的)——同样的 CKASP 你可以说:
to_remove = abs (CKASR) < = 2.5 & abs (CKASP) < = 2.5;

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!