字符可以用作索引吗?

Lui*_*ndo 3 arrays matlab matrix matrix-indexing

我们来定义一下,例如,

x = 10:10:2000;
Run Code Online (Sandbox Code Playgroud)

众所周知,整数值可以用作索引:

>> x(9)
ans =
    90
Run Code Online (Sandbox Code Playgroud)

在Matlab中,通常可以在需要数字的地方使用字符,Matlab会自动进行转换.例如,由于ASCII码'a'97,

>> 'a'+1
ans =
    98
Run Code Online (Sandbox Code Playgroud)

字符也可以用作索引吗?Matlab会将它们转换为整数吗?

Lui*_*ndo 6

可以使用它们......但是如果索引是单个冒号,请小心!

我们来定义

>> x = 10:10:2000;
Run Code Online (Sandbox Code Playgroud)

使用索引'a'生成第97个元素x,如预期的那样:

>> x('a')
ans =
   970
Run Code Online (Sandbox Code Playgroud)

但是,索引':'是一种特殊情况.该字符串':'充当:索引,从而生成所有值的列向量x.也就是说,x(':')是一样的x(:):

>> x(':')
ans =
          10
          20
          30
         ...
        1990
        2000
Run Code Online (Sandbox Code Playgroud)

这意味着':'正在评估索引(x(':')行为类似x(:)),而不评估用作索引的其他字符数组(x('a')不起作用x(a)):

>> a = 1;
>> x('a')
ans =
   970
Run Code Online (Sandbox Code Playgroud)

这也意味着,':'在索引之前转换为数字类型确实很重要,与用作索引的其他字符不同:

>> x(double('abc'))
ans =
   970   980   990
>> x('abc')
ans =
   970   980   990

>> x(double(':'))
ans =
   580
>> x(':')
ans =
          10
          20
          30
         ...
        1990
        2000
Run Code Online (Sandbox Code Playgroud)

':'用作索引的"评估"行为是已知的.令人惊讶的是与用作索引的其他字符或字符数组(未评估)的对比.

为简单起见,这些示例使用单个维度,但所描述的行为也适用于多维索引.在Octave中也观察到相同的行为.