Spec-Zone.ru › Octave 7

A.1.2 Матрицы и массивы в файлах Oct

Octave поддерживает ряд различных классов массивов и матриц, большинство из которых основаны на классе Array. Исключение составляют типы разреженных матриц, обсуждаемые отдельно ниже. Существует три основных типа матриц:

Matrix

Класс матриц двойной точности, определённый в dMatrix.h

ComplexMatrix

Класс матриц комплексных чисел, определённый в CMatrix.h

BoolMatrix

Класс булевых матриц, определённый в boolMatrix.h

Это основные двумерные типы матриц Octave. Кроме того, есть ряд многомерных типов массивов, включая

NDArray

Класс массивов двойной точности, определённый в dNDArray.h

ComplexNDarray

Класс массивов комплексных чисел, определённый в CNDArray.h

boolNDArray

Класс булевых массивов, определённый в boolNDArray.h

int8NDArray
int16NDArray
int32NDArray
int64NDArray

Классы массивов со знаками 8, 16, 32 и 64 бит, определённые в int8NDArray.h, int16NDArray.h и т. д.

uint8NDArray
uint16NDArray
uint32NDArray
uint64NDArray

Классы массивов без знака 8, 16, 32 и 64 бит, определённые в uint8NDArray.h, uint16NDArray.h и т. д.

Существует несколько основных способов построения матриц или многомерных массивов. Используя класс Matrix в качестве примера, можно

  • Создать пустую матрицу или массив с помощью пустого конструктора. Например:
    Matrix a;

    Это можно использовать для всех типов матриц и массивов.

  • Определить размеры матрицы или массива с помощью dim_vector, которая имеет те же характеристики, что и вектор, возвращаемый из size. Например:
    dim_vector dv (2, 3);  // 2 rows, 3 columns
    Matrix a (dv);

    Это можно использовать для всех типов матриц и массивов.

  • Определить число строк и столбцов в матрице. Например:
    Matrix a (2, 2)

    Этот конструктор можно использовать только с типами матриц.

Все эти типы разделяют ряд основных методов и операторов. Многие из них похожи на функции, которые существуют в интерпретаторе. К числу полезных методов относятся

Метод: T& operator () (octave_idx_type) ¶
Метод: T& elem (octave_idx_type) ¶

Оператор () или метод elem позволяют считывать или устанавливать значения матрицы или массива. Эти методы принимают один аргумент типа octave_idx_type, который является индексом в матрице или массиве. Кроме того, тип матрицы допускает версии оператора () и метода elem с двумя аргументами, предоставляющими индекс строки и столбца значения для получения или установки.

Обратите внимание, что эти функции выполняют значительную проверку ошибок, поэтому в некоторых случаях пользователю может потребоваться получить доступ к данным массива или матрицы напрямую с помощью метода fortran_vec , обсуждаемого ниже.

Метод: octave_idx_type numel (void) const ¶

Общее количество элементов в матрице или массиве.

Метод: size_t byte_size (void) const ¶

Количество байтов, используемых для хранения матрицы или массива.

Метод: dim_vector dims (void) const ¶

Размеры матрицы или массива в значении типа dim_vector.

Метод: int ndims (void) const ¶

Число измерений матрицы или массива. Матрицы всегда 2-мерные, но массивы могут быть N-мерными.

Метод: void resize (const dim_vector&) ¶
Метод: void resize (nrows, ncols) ¶

Метод, принимающий аргумент типа dim_vector, или, в случае матрицы, два аргумента типа octave_idx_type, определяющие число строк и столбцов в матрице.

Метод: T* fortran_vec (void) ¶

Этот метод возвращает указатель на исходные данные матрицы или массива, чтобы их можно было обрабатывать непосредственно, либо внутри Octave, либо внешней библиотекой.

Операторы, такие как +, -, или *, могут использоваться для большинства типов матриц и массивов. Кроме того, есть ряд методов, представляющих интерес только для матриц, таких как transpose, hermitian, solve и т. д.

Типичный способ извлечения матрицы или массива из входных аргументов функции DEFUN_DLD выглядит следующим образом

#include <octave/oct.h>

DEFUN_DLD (addtwomatrices, args, , "Add A to B")
{
  if (args.length () != 2)
    print_usage ();

  NDArray A = args(0).array_value ();
  NDArray B = args(1).array_value ();

  return octave_value (A + B);
}

Чтобы избежать ошибок сегментации, приводящих к прерыванию Octave, эта функция явно проверяет наличие достаточного количества аргументов перед доступом к этим аргументам. Затем она получает два многомерных массива типа NDArray и складывает их. Обратите внимание, что метод array_value вызывается без использования метода is_matrix_type. Если при попытке извлечь значение произойдёт ошибка, Octave выведет сообщение и сгенерирует исключение. Причина предпочтительности этой структуры кодирования заключается в том, что аргументы могут быть типа, который не является NDArray, но для которого было бы целесообразно преобразовать их в таковой. Метод array_value позволяет выполнять это преобразование прозрачно, когда это возможно. Если вам необходимо поймать такие ошибки и выполнить какую-либо очистку или другую операцию, вы можете перехватить исключение octave_execution_error.

A + B, действуя на два объекта NDArray, возвращает NDArray, которое присваивается типу octave_value при возвращении из функции. Пример использования этой демонстрационной функции:

addtwomatrices (ones (2, 2), eye (2, 2))
      ⇒  2  1
          1  2

Ниже приведён список основных типов Matrix и Array, методы извлечения их из octave_value, а также соответствующий заголовочный файл.

Тип Функция Исходный код
RowVector row_vector_value dRowVector.h
ComplexRowVector complex_row_vector_value CRowVector.h
ColumnVector column_vector_value dColVector.h
ComplexColumnVector complex_column_vector_value CColVector.h
Matrix matrix_value dMatrix.h
ComplexMatrix complex_matrix_value CMatrix.h
boolMatrix bool_matrix_value boolMatrix.h
charMatrix char_matrix_value chMatrix.h
NDArray array_value dNDArray.h
ComplexNDArray complex_array_value CNDArray.h
boolNDArray bool_array_value boolNDArray.h
charNDArray char_array_value charNDArray.h
int8NDArray int8_array_value int8NDArray.h
int16NDArray int16_array_value int16NDArray.h
int32NDArray int32_array_value int32NDArray.h
int64NDArray int64_array_value int64NDArray.h
uint8NDArray uint8_array_value uint8NDArray.h
uint16NDArray uint16_array_value uint16NDArray.h
uint32NDArray uint32_array_value uint32NDArray.h
uint64NDArray uint64_array_value uint64NDArray.h

© 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/v7.2.0/Matrices-and-Arrays-in-Oct_002dFiles.html

Spec-Zone.ru

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