如何根据矩阵中第一列的值删除行

How to delete rows based on value of first column in matrix

我有一个 3D 矩阵 xyposframe,我想删除该矩阵中第一列的数字低于 150 或高于 326 的所有行。我尝试了以下方法,但这并没有给我想要的结果:

indexbelow = xyposframe(:, 1) < 150;
indexabove = xyposframe(:, 1) > 326;
xyposframe(indexbelow, :) = [];
xyposframe(indexabove, :) = [];

如何删除这些行?

问题是 indexbelowindexabove 的大小都是 n -by- 1,即列向量的元素数量与元素数量一样多xyposframe 中的行。使用 xyposframe(indexbelow, :) = []; 您删除了一些行,从而使 xyposframen ,当您尝试调用 xyposframe(indexabove, :) = [];,因为您试图索引少于 n 个元素,总共有 n 个索引。

可能的解决方案是将操作分成两部分,或将它们组合在一个逻辑语句中:

% First one, then the other
indexbelow = xyposframe(:, 1) < 150;
xyposframe(indexbelow, :) = [];
indexabove = xyposframe(:, 1) > 326;
xyposframe(indexabove, :) = [];

% Combine using logical AND
indexbelow = xyposframe(:, 1) < 150;
indexabove = xyposframe(:, 1) > 326;
xyposframe(indexbelow & indexabove, :) = [];

% Or put everything in a single indexing line using logical OR
xyposframe(xyposframe(:,1)<150 | xyposframe(:,1) > 326) = [];