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