Spec-Zone.ru › Octave 9

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 () const

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

Метод: size_t byte_size () const

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

Метод: dim_vector dims () const

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

Метод: int ndims () const

Количество измерений матрицы или массива. Матрицы всегда двумерны, а массивы могут иметь N измерений.

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

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

Метод: T * fortran_vec ()

Этот метод возвращает указатель на базовые данные матрицы или массива, чтобы их можно было изменять напрямую — в 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–2026 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/v9.4.0/Matrices-and-Arrays-in-Oct_002dFiles.html

Spec-Zone.ru

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