Arrays 通过逻辑索引为数组赋值不需要';行不通
在Matlab中,我想用其他值替换某个值 我知道我可以做到这一点: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。有人知道为
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