通过逻辑索引为数组赋值并不起作用

时间:2015-04-06 21:45:02

标签: arrays matlab

在Matlab中,我想用某个其他值替换某个值。

我知道我可以这样做:

X(X==0) = -1 

如果我想将所有出现的0替换为1.

我有一个数组X,其中包含0到9之间的数字。我想创建一个新的数组Y,其中如果X(i)==某个给定的数字,比如5,则Y的第i个值为1,否则-1。所以我写了一段代码:

Y = (X == 5); 
Y(Y==0) = -1; 

第一行正常。它使用' 5'否则为0,因为它是逻辑运算。然后,如果它是0,我想用-1替换它,但是第二行以某种方式使数组的所有值都为1.有没有人知道为什么会发生这种情况?谢谢!

1 个答案:

答案 0 :(得分:3)

为什么你的方法不起作用确实有点古怪。原因是你的等式的左边是完全合乎逻辑的,右边也是逻辑的,并且

logical(-1) = 1

因此:

Y = (X == 5)    %// Y is logical
Y(Y == 0) = -1  %// Y is logical, Y == 0 is logical, 
                %// -1 is casted to logical and logical(-1) = 1

所以将你的第一个逻辑数组转换为double,并且它可以工作。

Y = (X == 5)    %// Y is logical
Y = double(Y)   %// Y is double
Y(Y == 0) = -1  %// Y is double, Y == 0 is logical

示例:

X = randi(9,20,1);
Y = (X == 5)   
Y = double(Y)   
Y(Y == 0) = -1  
out = [X Y]

out =

     7    -1
     3    -1
     5     1
     7    -1
     9    -1
     9    -1
     5     1
     2    -1
     2    -1
     3    -1
     8    -1
     3    -1
     8    -1
     3    -1
     9    -1
     4    -1
     2    -1
     3    -1
     6    -1
     5     1