任何人都可以解释以下代码:
Y(Y==0) = -1
将所有值0设置为-1。例如:
Y = [1 1 1 0 0 0 1]
我们得到:
Y = [1 1 1 -1 -1 -1 1]
让我感到困惑的是Y==0
没有返回索引的向量。
如果我尝试直接使用向量Y==0
,我会收到错误:
Y([0 0 0 1 1 1 0]) = -1
error: subscript indices must be either positive integers or logicals
我自然会选择:
Y(find(Y==0)) = -1
并想知道上述原因为何不使用find
TIA
答案 0 :(得分:2)
这称为逻辑索引。 gnu.org上有一些文档(参见4.6 Logical Values),但找到相关信息的最佳位置可能在MATLAB documentation。
您的示例不起作用,因为您使用的是双精度数组而不是逻辑数组来索引Y
。请考虑以下内容(使用Octave 3.6.2):
>> Y = [1 1 1 0 0 0 1]
Y =
1 1 1 0 0 0 1
>> idx = Y==0
idx =
0 0 0 1 1 1 0
>> idx_not_logical = [0 0 0 1 1 1 0]
idx_not_logical =
0 0 0 1 1 1 0
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
Y 1x7 56 double
ans 1x7 7 logical
cmd_path 1x489 489 char
gs_path 1x16 16 char
idx 1x7 7 logical
idx_not_logical 1x7 56 double
Total is 533 elements using 631 bytes
>> Y(idx_not_logical)=-1
error: subscript indices must be either positive integers or logicals
>> Y(idx)=-1
Y =
1 1 1 -1 -1 -1 1
答案 1 :(得分:2)
Y==0
返回bool matrix
,如下所示:
> typeinfo(Y==0)
ans = bool matrix
这就是为什么你不能直接使用[0 0 0 1 1 1 0]
索引,matrix
:
> typeinfo([0 0 0 1 1 1 0])
ans = matrix
如果您希望转换为布尔值,请使用logical()
:
> typeinfo(logical([0 0 0 1 1 1 0]))
ans = bool matrix