Их можно использовать... но будьте осторожны, если индекс представляет собой одно двоеточие!
Давайте определим
>> 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
Оцененное поведение ':'
, используемого в качестве индекса, было уже известно. Что удивительно, так это контраст с другими символами или массивами символов, используемыми в качестве индексов (которые не оцениваются).
В примерах для простоты используется одно измерение, но описанное поведение также применимо к многомерному индексированию. Такое же поведение наблюдается и в Octave.
person
Luis Mendo
schedule
23.03.2016