Spec-Zone.ru › Octave 8

4.2 Диапазоны

Диапазон — удобный способ записи строки-вектора с равномерно распределёнными элементами. Выражение диапазона определяется значением первого элемента в диапазоне, необязательным значением приращения между элементами и максимальным значением, которое элементы диапазона не должны превышать. Базовое значение, приращение и предел разделяются двоеточиями (символ ‘:’) и могут содержать любые арифметические выражения и вызовы функций. Если приращение опущено, оно предполагается равным 1. Например, диапазон

1 : 5

определяет множество значений [ 1, 2, 3, 4, 5 ], а диапазон

1 : 3 : 5

определяет множество значений [ 1, 4 ].

Хотя константа диапазона задаёт строку-вектор, Octave обычно не преобразует константы диапазонов в векторы, если это не требуется. Это позволяет вам записать константу, такую как 1 : 10000, не используя 80 000 байт памяти на типичной 32-битной рабочей станции.

Частый пример, когда преобразование диапазонов в векторы становится необходимым, возникает, когда они появляются внутри вектора (т. е. внутри квадратных скобок). Например, в то время как

x = 0 : 0.1 : 1;

определяет x как переменную типа range и занимает 24 байта памяти, выражение

y = [ 0 : 0.1 : 1];

определяет y как переменную типа matrix и занимает 88 байт памяти.

Эта оптимизация по экономии места может быть отключена с помощью функции optimize_range.

: val = optimize_range () ¶
: old_val = optimize_range (new_val) ¶
: old_val = optimize_range (new_val, "local") ¶

Запрос или установка того, используется ли специальный компактный формат для хранения диапазонов.

Значение по умолчанию — true. Если этот параметр установлен в false, Octave будет хранить диапазоны как полные матрицы.

При вызове изнутри функции с параметром "local" настройка изменяется локально для функции и любых вызываемых ею подпрограмм. Исходное значение восстанавливается при выходе из функции.

См. также: optimize_diagonal_matrix, optimize_permutation_matrix.

Обратите внимание, что верхняя (или нижняя, если приращение отрицательное) граница диапазона не всегда включается в множество значений, и что диапазоны, определённые с плавающей точкой, могут давать неожиданные результаты, потому что Octave использует арифметику с плавающей точкой для вычисления значений в диапазоне. Если важно включать конечные точки диапазона и известно количество элементов, следует использовать функцию linspace вместо неё (см. Специальные вспомогательные матрицы).

При добавлении скаляра к диапазону, вычитании скаляра из него (или вычитании диапазона из скаляра) и умножении на скаляр, Octave попытается избежать распаковки диапазона и сохранить результат также в виде диапазона, если сможет определить, что это безопасно. Например, выполнение

a = 2*(1:1e7) - 1;

произведёт тот же результат, что и 1:2:2e7-1, но без формирования вектора из десяти миллионов элементов.

Использование нуля в качестве приращения в обозначении двоеточием, как в 1:0:1, не допускается, потому что возникнет деление на ноль при определении количества элементов диапазона. Однако диапазоны с нулевым приращением (т. е. все элементы равны) полезны, особенно в индексировании, и Octave позволяет их создавать с помощью встроенной функции ones. Обратите внимание, что, так как диапазон должен быть строкой-вектором, ones (1, 10) создаёт диапазон, в то время как ones (10, 1) нет.

При разборе Octave выражения диапазона проверяет элементы выражения, чтобы определить, являются ли они все константами. Если это так, она заменяет выражение диапазона единственной константой диапазона.

© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Ranges.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API