2011-05-22 5 views
2

Je souhaite faire ce qui suit dans Matlab: -J'ai un fichier texte au format suivant: 1 1 0,242 1 2 0,332 .. -La première colonne est une liste de l'indice d'une matrice, la deuxième colonne est le jième indice d'une matrice, et la troisième colonne est la valeur de l'indice particulier (i, j) 75 74 0.485 75 75 0.726 ). Bref, j'ai une matrice 75x75 avec ses valeurs dans un fichier texte. -Je souhaite lire ces données et recréer la matrice dans matlab afin que je puisse y faire des opérations. Des suggestions?Comment recréer une matrice à partir des indices et des valeurs fichier texte froma dans Matlab

Répondre

0

Cela dépend si vous voulez le faire de manière interactive ou par programmation.

interactivement:

Importer le fichier texte à l'aide de l'assistant. Vous obtiendrez une matrice nx3 (disons data) de valeurs. Ensuite, utilisez une boucle simple pour mettre toutes les valeurs à leur place.

A = zeros(75, 75); 
for idx = 1:size(data, 1) 
    A(data(idx, 1), data(idx, 2)) = data(idx, 3); 
end 

Programmatically:

Est-ce que l'importation du fichier par programmation textscan par exemple. Puis procédez comme ci-dessus.

3

Ce que vous décrivez est un fichier stockant une matrice clairsemée (au format tuples). Une matrice clairsemée est une matrice où la plupart des éléments sont 0, donc pour économiser de l'espace, vous ne stockez que les éléments non-nulles. Matlab a un objet matriciel sparse intégré. Vous pouvez charger votre fichier directement:

>> load matrix.mtl; 
>> A = spconvert(matrix); 

voir: http://bebop.cs.berkeley.edu/smc/formats/matlab.html

Une autre chose que vous voudrez peut-être prendre en compte est la fonction sparse qui prend trois vecteurs et les transforme en une matrice creuse.

Une matrice clairsemée peut être convertie en une matrice dense (ie un tableau 2D, qui est ce que la plupart des gens veulent dire quand ils disent matrice) utilisent full(A)

0

En supposant que votre fichier est nommé « data.txt » et contient que les informations formatées comme vous l'avez mentionné, je pense que la meilleure façon de le faire, est un exemple de code comme ceci:

fid=fopen('data.txt','r'); 
data=fscanf(fid,'%g',[3 Inf]); 
fclose(fid); 
[m n]=size(data); 
a=zeros(75,75); 
for i=1:n 
    a(data(1,i),data(2,i))=data(3,i); 
end 

Si le fichier contient d'autres informations aussi, il faut prendre soin de recueillir les lignes et les données appropriées . À titre d'exemple des résultats avec les quelques échantillons que vous avez fournis, la matrice de données sera

data = 
1.0000 1.0000 75.0000 75.0000 
1.0000 2.0000 74.0000 75.0000 
0.2420 0.3320 0.4850 0.7260 

faites-nous savoir s'il y a d'autres problèmes.Bonne chance;)

1

Pour recréer une matrice complète de 75 par 75 à Matlab, vous pouvez d'abord charger votre fichier en utilisant la fonction LOAD:

data = load('datafile.txt','-ascii'); 

recréer ensuite votre matrice (sans la nécessité d'un pour boucle) en convertissant vos indices d'indice en linear indices en utilisant soit la fonction SUB2IND ou un simple calcul de votre choix:

mat = zeros(75); %# Initialize your matrix to zeroes 
mat(sub2ind([75 75],data(:,1),data(:,2))) = data(:,3); %# Use SUB2IND... 
%# ... or... 
mat(75.*(data(:,2)-1)+data(:,1)) = data(:,3); %# ... convert them yourself. 
Questions connexes