Могут ли символы использоваться в качестве индексов?
Давайте определим, например,
x = 10:10:2000;
Как известно, целочисленные значения могут использоваться в качестве индексов:
>> x(9)
ans =
90
В Matlab символы часто могут использоваться там, где ожидается число, а Matlab выполняет преобразование автоматически. Например, поскольку код ASCII 'a'
является 97
,
>> 'a'+1
ans =
98
Могут ли символы также использоваться в качестве индексов? Matlab конвертирует их в целые числа?
1 ответ
Их можно использовать... но будьте осторожны, если индекс состоит из одного двоеточия!
Давайте определимся
>> x = 10:10:2000;
Индексирование с 'a'
производит 97-й элемент x
, как и ожидалось:
>> 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
"Оцененное" поведение ':'
используемый в качестве индекса был уже известен. Что удивительно, так это контраст с другими символами или массивами символов, которые используются в качестве индексов (которые не оцениваются).
В примерах для простоты использовалось одно измерение, но описанное поведение также применимо к многомерной индексации. Такое же поведение наблюдается и в Октаве.