【问题标题】:Matlab can not set to negative, -1 [duplicate]Matlab不能设置为负,-1 [重复]
【发布时间】:2015-12-26 19:00:23
【问题描述】:

我想将矩阵/向量中的某些值替换为 -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

【问题讨论】:

  • 什么是changem?一个函数?它有什么作用?
  • 奇怪的是,当它显然不是基于问答时,它被标记为重复。

标签: matlab negative-number


【解决方案1】:

逻辑运算从二进制集合 {0, 1} 返回值。如果您希望这些为 {-1, +1} 一个简单的转换是乘以 2,然后减去 1。

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

【讨论】:

  • @crowdedComputeer 所以对 z 的赋值是一个二进制集,只有乘法运算会改变类型,这就是为什么 changem 或对索引的赋值不起作用。令人着迷。
  • 是的。 "==" 操作返回行为不同于数字类型的逻辑类型。我建议的转换利用了 Matlab 是动态类型的,并且在应用乘法时会自动将逻辑提升为双精度数。
  • @crowdedComputeeer 你混淆了动态类型和弱类型。 MATLAB 允许您在逻辑上应用+ 并执行隐式转换这一事实表明弱类型,但与动态类型无关。例如,C 是静态类型的,但执行类似的隐式类型转换。
  • touché @Jubobs,这将教我谈论袖口打字:-)
【解决方案2】:

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

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

z(1) = -1;

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

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多