字符可以用作索引吗?
Can characters be used as indices?
让我们定义,例如,
x = 10:10:2000;
众所周知,整数值可以用作索引:
>> x(9)
ans =
90
在 Matlab 中,通常可以在需要数字的地方使用字符,Matlab 会自动进行转换。例如,由于'a'
的ASCII码是97
,
>> 'a'+1
ans =
98
字符也可以用作索引吗? Matlab 是否将它们转换为整数?
它们可以使用...但如果索引是单个冒号,请小心!
让我们定义
>> x = 10:10:2000;
使用 'a'
进行索引生成 x
的第 97 个元素,正如预期的那样:
>> x('a')
ans =
970
然而,使用 ':'
进行索引是一种特殊情况 。字符串 ':'
充当 :
索引,从而生成包含 x
所有值的列向量。也就是说,x(':')
等同于 x(:)
:
>> x(':')
ans =
10
20
30
...
1990
2000
这意味着索引 ':'
正在被 评估(x(':')
的行为类似于 x(:)
),而其他字符数组用作索引未评估(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 中也观察到相同的行为。
让我们定义,例如,
x = 10:10:2000;
众所周知,整数值可以用作索引:
>> x(9)
ans =
90
在 Matlab 中,通常可以在需要数字的地方使用字符,Matlab 会自动进行转换。例如,由于'a'
的ASCII码是97
,
>> 'a'+1
ans =
98
字符也可以用作索引吗? Matlab 是否将它们转换为整数?
它们可以使用...但如果索引是单个冒号,请小心!
让我们定义
>> x = 10:10:2000;
使用 'a'
进行索引生成 x
的第 97 个元素,正如预期的那样:
>> x('a')
ans =
970
然而,使用 ':'
进行索引是一种特殊情况 。字符串 ':'
充当 :
索引,从而生成包含 x
所有值的列向量。也就是说,x(':')
等同于 x(:)
:
>> x(':')
ans =
10
20
30
...
1990
2000
这意味着索引 ':'
正在被 评估(x(':')
的行为类似于 x(:)
),而其他字符数组用作索引未评估(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 中也观察到相同的行为。