2016-09-13 10 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_zero又はgsl_matrix_set_identityによってすべての値の限られた設定を、サポート。

しかし、あなたが作成し、配列を初期化して、そこからマトリックスビューを作成することができますgsl_matrix_view_arraygsl_matrix_const_view_arraygsl_matrix_view_array_with_tdaまたはgsl_matrix_const_view_array_with_tdaを使用。行列ビューは、適用するgsl_matrixメソッドを実行するフィールドmatrixを含む構造体です。これは、行列ビューはGSLで一般的です(例えば、gsl_matrix_submatrixによって返されるサブ行列を表現するために使用されます)。

例えば、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"); 
    } 
} 
関連する問題