【问题标题】:MATLAB Remove Only Certain Zeros from MatrixMATLAB 仅从矩阵中删除某些零
【发布时间】:2011-10-27 14:47:56
【问题描述】:

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

【问题讨论】:

  • 你建议如何从二维矩阵的中间移除元素?
  • 这就是问题的重点。我正在解决 dx/ds=u, dy/dx=v, dc/ds=-\theta g(c),并且我正在使用 2D 插值,所以沿着参数化获取 u 和 v 值,从而给我后续的 x和 y 值使用正向欧拉。但是,每个起点的 x 和 y 向量中的元素数量都会发生变化。任何未在给定行中分配的额外空间都将被赋予 0 值。不过,我希望 c=2 在 (x,y)=(0,0),而我会得到一堆暗示 c(0,0)=0 的条目,所以我想删除 c(0) 的点,0)=0。我将尝试以下两种方法,看看哪种方法最好。谢谢。

标签: matlab matrix vector


【解决方案1】:

为简单起见,假设您使用称为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);

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

【讨论】:

  • 更干净的是:I = (X == 0 & Y == 0); X(I) = []; Y(I) = []; 即使用逻辑索引。
  • @Oli:真的很好奇——这个更干净,即有什么优点?
  • @MartinB - 主要的好处是省略了find 函数。这通常会使代码更容易理解。
  • @MartinB - 不仅更干净,而且如果您键入 X(find(Y==something)),matlab 编辑器建议您通过删除“find”函数来修复它,并显示以下消息: "要提高性能,请使用逻辑索引而不是 FIND"
  • @stefano:谢谢——不知道这一点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2014-10-21
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
相关资源
最近更新 更多