Armadillo 和 C++ - 使用二维数组进行矩阵初始化
Armadillo and C++ - Matrix initialization with 2D-array
我需要用双精度数组初始化犰狳矩阵。我在原始文档中找到了这个构造函数:
mat(*aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = true)
我在 SO 上找到了关于它的问题:
armadillo C++: matrix initialization from array
问题是,构造函数似乎仅适用于一维数组的初始化,不适用于二维数组。如果我尝试以这种方式使用它:
double **matrix = new double *[block_size];
for(int i = 0; i < block_size; i++) {
matrix[i] = new double[block_size];
}
arma::mat arma_matrix( &matrix[0][0], matrix_size, matrix_size, true, true );
cout << "am: " << arma_matrix[1][0] << endl;
我收到错误:
fined_grain:103/init_function: In function ‘void place_user_fn_103(ca::Context&, ca::TokenList<double>&)’:
fined_grain:103/init_function:61:42: error: invalid types ‘double[int]’ for array subscript
那么,用二维数组初始化 Arma 矩阵的理想方法是什么?我更喜欢最快的解决方案,因为我需要使用大矩阵。
我快速浏览了 armadillo library documentation,发现了以下问题。
您传递给 arma_matrix
的参数在句法上是正确的,但不正确。您需要使用:
double *matrix = new double [block_size*block_size];
arma::mat arma_matrix( matrix, block_size, block_size, true, true );
访问元素的语法是:
cout << "am: " << arma_matrix(1, 0) << endl;
您还可以使用:
int row = 1;
int col = 0;
cout << "am: " << arma_matrix[row*block_size+col] << endl;
我需要用双精度数组初始化犰狳矩阵。我在原始文档中找到了这个构造函数:
mat(*aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = true)
我在 SO 上找到了关于它的问题:
armadillo C++: matrix initialization from array
问题是,构造函数似乎仅适用于一维数组的初始化,不适用于二维数组。如果我尝试以这种方式使用它:
double **matrix = new double *[block_size];
for(int i = 0; i < block_size; i++) {
matrix[i] = new double[block_size];
}
arma::mat arma_matrix( &matrix[0][0], matrix_size, matrix_size, true, true );
cout << "am: " << arma_matrix[1][0] << endl;
我收到错误:
fined_grain:103/init_function: In function ‘void place_user_fn_103(ca::Context&, ca::TokenList<double>&)’:
fined_grain:103/init_function:61:42: error: invalid types ‘double[int]’ for array subscript
那么,用二维数组初始化 Arma 矩阵的理想方法是什么?我更喜欢最快的解决方案,因为我需要使用大矩阵。
我快速浏览了 armadillo library documentation,发现了以下问题。
您传递给
arma_matrix
的参数在句法上是正确的,但不正确。您需要使用:double *matrix = new double [block_size*block_size]; arma::mat arma_matrix( matrix, block_size, block_size, true, true );
访问元素的语法是:
cout << "am: " << arma_matrix(1, 0) << endl;
您还可以使用:
int row = 1; int col = 0; cout << "am: " << arma_matrix[row*block_size+col] << endl;