0

我在matlab中有两个数组(小部分如下所示):

    A     B
   2     3
   0,1   3,6
   0,1   3,6
   0,1   3,6
   0,1   3,2
   0     3,2
   0     3,2
   0     3,2
   0     2,4
   0     4,3
   0,1   4,3
   0,1   4,3
   0,1   4,3
   0,1   4,3
   0,1   4,3

我想要做什么:如果 A 列中的值为零,则 B 列中的值应更改为零或 NaN。

我将不胜感激有关此的任何帮助!我是 matlab 新手,我不确定是否可以/应该使用“for - end”循环?

谢谢!:)

4

1 回答 1

4

您可以使用逻辑索引

B(A == 0) = 0;

该表达式A == 0返回一个逻辑数组(布尔值),在与 中的零元素对应的位置包含“1” A。将此布尔数组馈入,仅选择“1”位置处的B元素。B零分配是不言自明的。

但是,当A包含十进制值时,Rody 正确地指出比较操作可能不准确并返回错误结果。因此,您应该设置一个容差(例如的倍数eps),如下所示:

tol = eps;           %// Tolerance
B(abs(A) < tol) = 0;

如果您不关心浮点数的不准确性,并且既不A包含NaN值也不包含复数,您可以使用以下缩短的语法:

B(~A) = 0;
于 2013-05-13T13:03:05.687 回答