初始化 GSL 矩阵的元素
Initialize elements of GSL matrix
我已经分配了一个大的 gsl_matrix 并且想要分配其所有具有已知浮点值的元素。有没有办法不对每个元素使用 gsl_matrix_set 来做到这一点?我正在寻找与 Fortran 的重塑函数等效的函数来初始化矩阵。
A = reshape( (/0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7/), (/ 8, 8/) )
矩阵只支持所有值的有限设置,即gsl_matrix_set_all
、gsl_matrix_set_zero
或gsl_matrix_set_identity
。
但是,您可以创建并初始化一个数组,然后使用 gsl_matrix_view_array
、gsl_matrix_const_view_array
、gsl_matrix_view_array_with_tda
从中创建一个 矩阵视图 或 gsl_matrix_const_view_array_with_tda
。 (矩阵视图在 GSL 中很常见。例如,它们用于表示 gsl_matrix_submatrix
返回的子矩阵。)矩阵视图是一个包含字段 matrix
的结构,您可以在该字段上执行 gsl_matrix 您希望应用的方法。
例如,用gcc matrixview.c -lgsl -lgslcblas
编译如下文件matrixview.c
:
#include <stdio.h>
#include <gsl/gsl_matrix.h>
#define rows 2
#define cols 3
int main () {
const double data[rows*cols] = {
0.0, 0.1, 0.2,
1.0, 1.1, 1.2,
};
const gsl_matrix_const_view mat = gsl_matrix_const_view_array( data, rows, cols );
for ( size_t row = 0; row < rows; ++row ) {
for ( size_t col = 0; col < cols; ++col ) {
printf( "\t%3.1f", gsl_matrix_get( &mat.matrix, row, col ) );
}
printf( "\n" );
}
}
我已经分配了一个大的 gsl_matrix 并且想要分配其所有具有已知浮点值的元素。有没有办法不对每个元素使用 gsl_matrix_set 来做到这一点?我正在寻找与 Fortran 的重塑函数等效的函数来初始化矩阵。
A = reshape( (/0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7,
0, 1, 2, 3, 4, 5, 6, 7/), (/ 8, 8/) )
矩阵只支持所有值的有限设置,即gsl_matrix_set_all
、gsl_matrix_set_zero
或gsl_matrix_set_identity
。
但是,您可以创建并初始化一个数组,然后使用 gsl_matrix_view_array
、gsl_matrix_const_view_array
、gsl_matrix_view_array_with_tda
从中创建一个 矩阵视图 或 gsl_matrix_const_view_array_with_tda
。 (矩阵视图在 GSL 中很常见。例如,它们用于表示 gsl_matrix_submatrix
返回的子矩阵。)矩阵视图是一个包含字段 matrix
的结构,您可以在该字段上执行 gsl_matrix 您希望应用的方法。
例如,用gcc matrixview.c -lgsl -lgslcblas
编译如下文件matrixview.c
:
#include <stdio.h>
#include <gsl/gsl_matrix.h>
#define rows 2
#define cols 3
int main () {
const double data[rows*cols] = {
0.0, 0.1, 0.2,
1.0, 1.1, 1.2,
};
const gsl_matrix_const_view mat = gsl_matrix_const_view_array( data, rows, cols );
for ( size_t row = 0; row < rows; ++row ) {
for ( size_t col = 0; col < cols; ++col ) {
printf( "\t%3.1f", gsl_matrix_get( &mat.matrix, row, col ) );
}
printf( "\n" );
}
}