字符可以用作索引吗?

时间:2016-03-23 22:08:55

标签: arrays matlab matrix matrix-indexing

让我们定义,例如,

x = 10:10:2000;

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

>> x(9)
ans =
    90

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

>> 'a'+1
ans =
    98

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

1 个答案:

答案 0 :(得分:6)

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

让我们来定义

>> x = 10:10:2000;

使用'a'建立索引会产生x的第97个元素,正如所料:

>> x('a')
ans =
   970

但是,使用 ':'进行索引是一种特殊情况。字符串':'充当:索引,从而生成所有值x的列向量。也就是说,x(':')x(:)相同:

>> x(':')
ans =
          10
          20
          30
         ...
        1990
        2000

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

>> a = 1;
>> x('a')
ans =
   970

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

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

>> x(double(':'))
ans =
   580
>> x(':')
ans =
          10
          20
          30
         ...
        1990
        2000

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

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