Могут ли символы использоваться в качестве индексов?

Давайте определим, например,

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

"Оцененное" поведение ':' используемый в качестве индекса был уже известен. Что удивительно, так это контраст с другими символами или массивами символов, которые используются в качестве индексов (которые не оцениваются).

В примерах для простоты использовалось одно измерение, но описанное поведение также применимо к многомерной индексации. Такое же поведение наблюдается и в Октаве.

Другие вопросы по тегам