我有一个包含一堆逻辑值的数组,它看起来像:
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将任何不是1
或0
的值强制转换为最接近的逻辑值 - 但我想确认一下。这肯定很奇怪。
答案 0 :(得分:7)
这是因为你的数组是boolean,而5
在布尔值中计算为true
,显示为1
。在英语中,您的代码test(test == 0) = 5
转换为“将所有False值设置为True”。结果是全部 - true
数组,即所有数组。