在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.有没有人知道为什么会发生这种情况?谢谢!
答案 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