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

int8NDArray.h, int16NDArray.h等中定义的8、16、32和64位带符号数组类

广告
uint8NDArray
uint16NDArray
uint32NDArray
uint64NDArray

uint8NDArray.h, uint16NDArray.h等中定义的8、16、32和64位无符号数组类

广告

构造矩阵或多维数组有几种基本方法。使用类Matrix作为一个例子,可以

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

方法: T& operator () (octave_idx_type)
方法: T& elem (octave_idx_type)

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

广告

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

方法: 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 * rwdata ()

此方法返回一个指向矩阵或数组的底层数据的指针,以便可以在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