Arrays 通过逻辑索引为数组赋值不需要';行不通

Arrays 通过逻辑索引为数组赋值不需要';行不通,arrays,matlab,Arrays,Matlab,在Matlab中,我想用其他值替换某个值 我知道我可以做到这一点: X(X==0) = -1 如果要将所有0替换为1 我有一个数组X,其中包含0到9之间的数字。我想创建一个新数组Y,其中Y的第I个值是1,如果X(I)=某个给定数字,比如5,否则为-1。所以我写了一个代码: Y = (X == 5); Y(Y==0) = -1; 第一行很好用。它将所有带有“5”的单元格投影到1,否则为0,因为这是一个逻辑运算。如果它是0,我想用-1替换它,但第二行不知何故使数组的所有值都为1。有人知道为

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

我知道我可以做到这一点:

X(X==0) = -1 
如果要将所有0替换为1

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

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

第一行很好用。它将所有带有“5”的单元格投影到1,否则为0,因为这是一个逻辑运算。如果它是0,我想用-1替换它,但第二行不知何故使数组的所有值都为1。有人知道为什么会发生这种情况吗??谢谢

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

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]


@烧杯不要紧是的,我刚发现…:)我认为原始方法不起作用的原因是:当
Y
是一个
逻辑数组时,为它的某些条目指定一个0或1以外的值并不会使它成为一个
;它保持为
逻辑
。因此,除
0
之外的所有内容都转换为逻辑
1
true
),而
0
转换为逻辑
0
false
)。例如:
y=true,y(1)=-1
y=(X==5)*2-1
也可以工作,我想这是因为乘法将整个数组转换为数字。@LuisMendo在您写此注释时,我正在将其写入答案中。我同意!
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