2017-05-22 1 views
0

J'ai la tâche de charger des matrices creuses définies symétriques positives de The University of Florida Sparse Matrix Collection dans GNU Octave. Je dois étudier différents algorithmes de commande, comme symamd mais je ne peux pas les utiliser puisque les matrices ne sont pas stockées au carréImpossible de charger correctement la matrice creuse dans l'octave

J'ai choisi par exemple .

J'ai essayé différentes load methods avec les fichiers .mat:

load -mat bcsstk17 
load -mat-binary bcsstk17 
load -6 bcsstk17 
load -v6 bcsstk17 
load -7 bcsstk17 
load -mat4-binary bcsstk17 
error: load: can't read binary file 
load -4 bcsstk17 

Mais aucun d'entre eux a travaillé, puisque les variables de mon espace de travail sont vides.

Lorsque je charge le format Matrix Market mtx, charge bcsstk17.mtx j'obtiens une matrice 219813x3.

J'ai essayé le full command mais j'ai la même matrice 219813x3.

Qu'est-ce que je fais mal?

Répondre

1

Vous ne savez pas pourquoi vous essayez de charger le fichier .mtx lorsqu'il existe un format .mat spécifique à matlab/octave.

télécharger juste le fichier bcsstk17.mat, et le charger:

load bcsstk17.mat 

Vous verrez alors sur votre espace de travail une variable appelée Problem qui est de type struct. Cela contient plusieurs champs, y compris un champ A qui semble contenir vos données sous la forme d'une matrice clairsemée. En d'autres termes, vos données sont accessibles en tant que Problem.A


Vous ne devriez pas prendre la peine avec le fichier .mtx du tout. Cependant, pour terminer, je vais vous expliquer ce que vous voyez lorsque vous le chargez. Le fichier .mat est un format binaire. Cependant, un fichier .mtx semble être un format lisible par l'homme (c'est-à-dire qu'il contient un texte ASCII normal). En particulier il semble qu'il se compose d'un 'en-tête' contenant des commentaires, qui commencent par un % caractère, une ligne qui semble coder la taille de la matrice clairsemée dans chaque dimension, puis il contient des données "délimitées par des espaces" , où chaque rangée représente vraisemblablement un élément dans la matrice, et les trois colonnes représentent vraisemblablement la ligne, la colonne et la valeur de cet élément.

Lorsque Matlab est dans un fichier ASCII contenant des données (+ commentaires), quelle que soit l'extension, tant que les données semble comme un tableau 2D valide des nombres, il charge les données contenu de ce fichier sur une variable avec le même nom que le fichier.

De toute évidence, ce n'est pas ce que vous voulez. Pas moins parce que la première rangée sera interprétée comme une rangée normale de données dans une matrice Nx3. En d'autres termes, matlab/octave ne fait que charger un fichier standard qu'il considère comme basé sur du texte, et il charge les valeurs qu'il voit à l'intérieur sur une variable. L'extension .mtx est ici sans importance en ce qui concerne matlab/octave, et il ne s'agit certainement pas d'interpréter ou de décoder le fichier .mtx de quelque façon que ce soit lié à la spécification .mtx.

+0

Merci, je ne savais pas que je chargeais une structure – Gaston