2016-09-13 4 views
1

J'ai alloué une grande matrice gsl et j'aimerais allouer tous ses éléments avec des valeurs flottantes connues. Est-il possible de le faire sans utiliser gsl_matrix_set pour chaque élément? Je cherche l'équivalent de la fonction de remodelage de Fortran pour initialiser une matrice.Initialiser les éléments de la matrice 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/)) 

Répondre

2

ne supportent que Matrices cadre limité de toutes les valeurs, qui est par gsl_matrix_set_all, gsl_matrix_set_zero ou gsl_matrix_set_identity.

Cependant, vous pouvez créer et initialiser un tableau, puis créer une vue matrice de qu'utiliser gsl_matrix_view_array, gsl_matrix_const_view_array, gsl_matrix_view_array_with_tda ou gsl_matrix_const_view_array_with_tda. (Les vues matricielles sont communes dans GSL, par exemple, elles sont utilisées pour exprimer des sous-matrices renvoyées par gsl_matrix_submatrix.) La vue matricielle est une structure qui contient un champ matrix sur lequel vous exécutez les méthodes gsl_matrix que vous souhaitez appliquer.

Par exemple, compiler avec gcc matrixview.c -lgsl -lgslcblas le fichier suivant 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"); 
    } 
}