2016-09-13 139 views
1

我已經分配了一個大的gsl_matrix,並想分配其所有具有已知浮點值的元素。有沒有辦法做到這一點,而不使用每個元素的gsl_matrix_set?我正在尋找fortran的重塑函數來初始化矩陣的等價物。初始化GSL矩陣的元素

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/)) 

回答

2

矩陣僅支持的所有值的有限設置,即通過gsl_matrix_set_allgsl_matrix_set_zerogsl_matrix_set_identity

然而,可以創建並初始化一個數組,然後從該創建矩陣視圖使用gsl_matrix_view_arraygsl_matrix_const_view_array,或gsl_matrix_view_array_with_tdagsl_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"); 
    } 
}