我有一个3D矩阵xyposframe
,我想删除该矩阵中第一列数字低于150
或高于326
的所有行。我尝试了以下操作,但没有得到想要的结果:
indexbelow = xyposframe(:, 1) < 150;
indexabove = xyposframe(:, 1) > 326;
xyposframe(indexbelow, :) = [];
xyposframe(indexabove, :) = [];
如何删除这些行?
问题是indexbelow
和indexabove
的大小都是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) = [];