J'ai beaucoup de fichiers .mat qui contiennent des informations sur la partie radiale de certaines fonctions d'onde et d'autres informations sur un atome. Maintenant, j'ai réussi à extraire la partie wavefunction et à utiliser numpy.savetxt() pour l'enregistrer dans un fichier .txt. Mais la taille du fichier augmente tellement: Après avoir couruLa taille du fichier augmente après la conversion de fichiers .mat en fichiers .txt
du -ch wfkt_X_rb87_n=40_L=11_J=0_step=0.001.mat
440K wfkt_X_rb87_n=40_L=11_J=0_step=0.001.mat
du -ch wfkt_X_rb87_n=40_L=12_J=0_step=0.001.txt
2,9M wfkt_X_rb87_n=40_L=12_J=0_step=0.001.txt
Ignore L = 11 et L = 12 différence, la taille des fonctions d'onde sont presque les mêmes, mais la taille du fichier a augmenté de plus de 6 fois. Je veux savoir la raison et probablement un moyen de diminuer la taille des fichiers .txt. Voici le code que je Covert les fichiers:
import scipy.io as sio
import os
import pickle
import numpy as np
import glob as gb
files=gb.glob('wfkt_X_rb*.mat')
for filet in files:
print filet
mat=sio.loadmat(filet)
wave=mat['wavefunction'][0]
J=mat['J']
L=mat['L']
n=mat['n']
xmax=mat['xmax'][0][0]
xmin=mat['xmin'][0][0]
xstep=mat['xstep'][0][0]
energy=mat['energy'][0][0]
name=filet.replace('.mat','.txt')
name=name.replace('rb','Rb')
x=np.linspace(xmin, xmax, num=len(wave), endpoint=False)
Data=np.transpose([x,wave])
np.savetxt(name,Data)
os.remove(filet)
with open(name, "a") as f:
f.write(str(energy)+" "+str(xstep)+"\n")
f.write(str(xmin)+" "+str(xmax))
et le format du fichier de données nécessaires est:
2.700000000000000000e+01 6.226655250941872093e-04
2.700099997457605738e+01 6.232789496263042460e-04
2.700199994915211121e+01 6.238928333406641843e-04
2.700299992372816860e+01 6.245071764542571872e-04
2.700399989830422243e+01 6.251219791839867897e-04
2.700499987288027981e+01 6.257372417466700075e-04
2.700599984745633364e+01 6.263529643590372287e-04
Si vous avez besoin de plus amples informations, ne hésitez pas à demander! Merci d'avance.
Selon la façon dont vous les avez sauvegardés, il peut s'agir simplement d'un changement de type de données. Pouvez-vous ajouter le code utilisé pour les lire/les sauvegarder? – Benjamin
mat-Files sont binaires, et compressés, et les fichiers txt sont, ohm, du texte, donc un facteur de 3 à 6 est tout à fait normal. Si la taille est importante, utilisez un format binaire comme .mat. – Daniel
C'est à prévoir. Les fichiers texte convertissent les nombres représentés en binaire en caractères.Un exemple trivial simpliste: le nombre 2 peut être représenté par deux bits '10' en binaire, le caractère" 2 "est hexadécimal. 32, c'est huit bits binaires (en ASCII), donc 4 fois plus gros (en Unicode ce serait 16 bits). Une façon de réduire est de compresser le fichier txt - il y a un certain nombre de modules python disponibles pour cela, mais vous devez le décompresser pour utiliser le fichier. La réduction de taille dépendra des données. – cdarke