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



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

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

如何删除这些行?

问题是indexbelowindexabove的大小都是n-by-1,即具有与xyposframe中的行一样多的元素的列向量。使用xyposframe(indexbelow, :) = [];可以删除多个行,从而使xyposframe的少于n的行,这会在尝试调用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) = [];

相关内容

  • 没有找到相关文章