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
作为一个例子,可以
Matrix a;
这可以用于所有矩阵和数组类型。
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 |
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2