A.1.2 Oct文件中的矩阵和数组

Octave支持许多不同的数组和矩阵类,其中大多数基于Array类例外情况是下面单独讨论的稀疏矩阵型。有三种基本矩阵类型:

Matrix

中定义的双精度矩阵类d矩阵.h

ComplexMatrix

中定义的复杂矩阵类C矩阵.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作为一个例子,可以

这些类型都共享一些基本方法和运算符。许多都与解释器中存在的函数有关。一系列有用的方法包括

Method: T& operator () (octave_idx_type)
Method: T& elem (octave_idx_type)

这个()运算符或elem方法允许读取或设置矩阵或数组的值。这些方法只接受一个类型为的参数octave_idx_type,即矩阵或数组的索引。此外,矩阵类型允许的两个参数版本()运算符和elem方法,给出要获取或设置的值的行和列索引。

请注意,这些函数会进行重要的错误检查,因此在某些情况下,用户可能更喜欢直接通过fortran_vec方法如下所述。

Method: octave_idx_type numel () const

矩阵或数组中元素的总数。

Method: size_t byte_size () const

用于存储矩阵或数组的字节数。

Method: dim_vector dims () const

类型的值中的矩阵或数组的维度dim_vector.

Method: int ndims () const

矩阵或数组的维数。矩阵总是二维的,但数组可以是N维的。

Method: void resize (const dim_vector&)
Method: void resize (nrows, ncols)

一种方法,采用类型为的参数之一dim_vector,或者,在矩阵的情况下,两个类型为的参数octave_idx_type定义矩阵中的行数和列数。

Method: 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

基本的列表MatrixArray类型,从中提取这些的方法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

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2