Spec-Zone.ru › Octave 6

8.1 Индексы выражений

Выражение индекса позволяет вам ссылаться или извлекать выбранные элементы вектора, матрицы (2-D) или многомерного массива.

Индексы могут быть скалярами, векторами, диапазонами или специальным оператором «:», который выбирает целые строки, столбцы или многомерные срезы.

Выражение индекса состоит из набора скобок, заключающих M выражений, разделенных запятыми. Каждое отдельное значение индекса или компонент используется для соответствующего измерения объекта, к которому оно применяется. Другими словами, первый компонент индекса используется для первого измерения (строк) объекта, второй компонент индекса используется для второго измерения (столбцов) объекта и так далее. Количество компонентов индекса M определяет размерность выражения индекса. Индекс с двумя компонентами называется 2-мерным индексом, потому что он имеет два измерения.

В самом простом случае 1) все компоненты являются скалярами, и 2) размерность выражения индекса M равна размерности объекта, к которому оно применяется. Например:

A = reshape (1:8, 2, 2, 2)  # Create 3-D array
A =

ans(:,:,1) =

   1   3
   2   4

ans(:,:,2) =

   5   7
   6   8

A(2, 1, 2)   # second row, first column of second slice
             # in third dimension: ans = 6

Размер возвращаемого объекта в определенном измерении равен количеству элементов в соответствующем компоненте выражения индекса. Когда все компоненты являются скалярами, результатом является единственное выходное значение. Однако, если любой компонент является вектором или диапазоном, возвращаемые значения являются декартовым произведением индексов в соответствующих измерениях. Например:

A([1, 2], 1, 2) ≡ [A(1,1,2); A(2,1,2)]
⇒
ans =
   5
   6

Общее количество возвращаемых значений является произведением количества элементов, возвращаемых для каждого компонента индекса. В приведенном выше примере общее количество равно 2*1*1 = 2 элемента.

Обратите внимание, что размер возвращаемого объекта в данном измерении равен количеству элементов в выражении индекса для этого измерения. В приведенном выше коде первый компонент индекса ([1, 2]) был указан как строковый вектор, но его форма не имеет значения. Важным фактом является то, что компонент указал два значения, и поэтому результат должен иметь размер два в первом измерении; и поскольку первое измерение соответствует строкам, общий результат является столбцовым вектором.

A(1, [2, 1, 1], 1)    # result is a row vector: ans = [3, 1, 1]
A(ones (2, 2), 1, 1)  # result is a column vector: ans = [1; 1; 1; 1]

Первая строка снова демонстрирует, что размер вывода в данном измерении равен количеству элементов в соответствующем индексирующем компоненте. В этом случае вывод имеет три элемента во втором измерении (что соответствует столбцам), поэтому результатом является строковый вектор. Пример также показывает, как повторяющиеся записи в выражении индекса могут использоваться для дублирования элементов в выводе. Последний пример дополнительно доказывает, что форма индексирующего компонента не имеет значения, важно только количество элементов (2x2 = 4).

Приведенные выше правила применяются всякий раз, когда размерность выражения индекса больше единицы (M > 1). Однако для одномерных выражений индекса применяются особые правила, и форма вывода определяется формой индексирующего компонента. Например:

A([1, 2])  # result is a row vector: ans = [1, 2]
A([1; 2])  # result is a column vector: ans = [1; 2]

Обратите внимание, что разрешается использовать одномерный индекс с многомерным объектом (также называется линейным индексированием). В этом случае элементы многомерного массива берутся в порядке следования столбцов, как в Fortran. То есть, столбцы массива представляются как сложенные друг на друга, чтобы сформировать столбцовый вектор, а затем к этому вектору применяется одиночный линейный индекс.

A(5)    # linear indexing into three-dimensional array: ans = 5
A(3:5)  # result has shape of index component: ans = [3, 4, 5]

Двоеточие (‘:’) может использоваться в качестве компонента индекса для выбора всех элементов в указанном измерении. Учитывая матрицу:

A = [1, 2; 3, 4]

все следующие выражения эквивалентны и выбирают первую строку матрицы.

A(1, [1, 2])  # row 1, columns 1 and 2
A(1, 1:2)     # row 1, columns in range 1-2
A(1, :)       # row 1, all columns

Когда двоеточие используется в частном случае одномерного индексирования, результатом всегда является столбцовый вектор. Создание столбцовых векторов с индексом двоеточие является очень часто встречающимся фрагментом кода и быстрее и обычно понятнее, чем вызов reshape в этом случае.

A(:)    # result is column vector: ans = [1; 2; 3; 4]
A(:)'   # result is row vector: ans = [1, 2, 3, 4]

В выражениях индексов ключевое слово end автоматически ссылается на последнюю запись для конкретного измерения. Этот магический индекс также может использоваться в диапазонах и обычно устраняет необходимость вызова size или length для сбора границ массива перед индексированием. Например:

A(1:end/2)        # first half of A => [1, 2]
A(end + 1) = 5;   # append element
A(end) = [];      # delete element
A(1:2:end)        # odd elements of A => [1, 3]
A(2:2:end)        # even elements of A => [2, 4]
A(end:-1:1)       # reversal of A => [4, 3, 2, 1]
• Расширенное индексирование

© 1996–2022 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/v6.4.0/Index-Expressions.html

Spec-Zone.ru

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