修改逻辑数组时的奇怪行为

时间:2017-11-23 05:05:56

标签: arrays matlab

我有一个包含一堆逻辑值的数组,它看起来像:

test = [1 1 1 1 1 0 0 1 1 0 0 ...]

如果我想更改标量值的正常数组 - 请说

a = [1 2 3 4]

我能做到:

a(a == 1) = 5

,结果将是

[5 2 3 4]

正如所料。

但是,如果我这样做:

test(test == 0) = 5

我找回了意外

[1 1 1 1 1 1 1 1 1 1 1 1 1 1....

所有0都已更改为1!

我怀疑这是因为数组中充满了逻辑,并且由于类型检查,MATLAB将任何不是10的值强制转换为最接近的逻辑值 - 但我想确认一下。这肯定很奇怪。

1 个答案:

答案 0 :(得分:7)

这是因为你的数组是boolean,而5在布尔值中计算为true,显示为1。在英语中,您的代码test(test == 0) = 5转换为“将所有False值设置为True”。结果是全部 - true数组,即所有数组。