如何根据矩阵中第一列的值删除行
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, :) = [];
如何删除这些行?
问题是 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) = [];
我有一个 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) = [];