MATLAB只从矩阵中删除某些零

Jef*_*eff 1 matlab vector matrix

我已经看到了很多关于如何删除前导和/或尾随零的答案,以及如何从向量或矩阵中删除所有零.但是,我需要做的只是删除其中一些.我有两个矩阵,我只想删除它们都为零的条目.它们是二维x和y坐标,使用特征求解(我可以根据需要提供更多细节),我只想删除两个矩阵在相同索引处包含零的值.我可以轻松地将矩阵转换为向量并使用向量,因此在任何一种情况下的任何帮助都将非常感激.

Mar*_*n B 5

为简单起见,我们假设您使用的是被称为XY(长度相同)的向量,并且您只想删除两个向量都为零的条目.这是如何(未测试):

% Find the indexes where either X or Y is different from zero
% (these are the indexes of the components we want to keep)
I = find(X~=0 | Y~=0);

% Select the desired components from X and Y
X=X(I);
Y=Y(I);
Run Code Online (Sandbox Code Playgroud)

编辑:正如Oli在下面指出的那样(以及stefano进一步解释),您应该使用逻辑索引来获得更好的性能.

  • 清洁工是:`I =(X == 0&Y == 0); X(I)= []; Y(I)= [];`即使用逻辑索引. (3认同)
  • @MartinB - 不仅更干净,但如果你输入X(find(Y == something)),matlab编辑器会建议你通过删除'find'函数修复它,并带有以下消息:"为了提高性能,使用逻辑索引而不是寻找" (2认同)