使用八度音程来映射矢量值

时间:2013-12-03 14:44:25

标签: matlab vector map octave

任何人都可以解释以下代码:

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

2 个答案:

答案 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