matlab不能设置为负数,-1

Matlab can not set to negative, -1

我想将 matrix/vector 中的某些值替换为 -1,但似乎不能。

x = [1 5 6; 2 4 3; 3 4 2; 4 2 1];
z = x(:,1) == 4 % get result I want
z =

 0
 0
 0
 1

changem(z,-1,0) % changem doesn't work

ans =

 1
 1
 1
 1

如果我在 changem 中创建数组也是如此

changem(z,[-1 1],[0 1])
ans =

 1
 1
 1
 1

这也不行

 z(1) = -1
 z =

   1
   0
   0
   1

为什么我不能操纵向量来获得以下值

ans =

 -1
 -1
 -1
 1

这种方法可行,但如果能回答上一个问题就更好了,谢谢。

z = x(:,1) ~= 4; 
z = z * -1; 
z = changem(z,1,0)
ans =

 -1
 -1
 -1
 1

逻辑运算 returns 来自二进制集 {0, 1} 的值。如果你想要这些作为 {-1, +1} 一个简单的转换是乘以 2,然后减去 1。

z = (x(1, :)  == 4)*2 - 1

我不知道 changeme 是什么,因此无法评论该函数的结果。

在 Matlab 和各种环境(例如 C、C++)中,零的计算结果为逻辑假,除零以外的任何内容都计算为逻辑真。例如在 Matlab 中,logical(x) 会将双精度数组 x 转换为 binary/logical 数组。 logical(-1) 的计算结果为 1(即真)。如果 z 是逻辑数组并且您进行赋值:

z(1) = -1;

双精度值 -1 被转换为二进制值,即 true(即 1),因为除 0 之外的所有值都转换为真 1。然后将 1 分配给第一个z 的索引。一切正常。