【发布时间】:2016-10-28 13:10:12
【问题描述】:
我有很多 .mat 文件,其中包含有关某些不同波函数的径向部分的信息以及有关原子的其他一些信息。现在我成功提取了波函数部分并使用 numpy.savetxt() 将其保存到 .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
忽略L=11和L=12的区别,波函数的大小几乎一样,但文件大小增加了6倍以上。我想知道减小 .txt 文件大小的原因和可能的方法。 这是我如何隐藏文件的代码:
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))
需要的数据文件格式为:
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
如果您需要更多信息,请随时询问!提前致谢。
【问题讨论】:
-
取决于您如何保存它们,可能只是数据类型的更改。您可以添加用于读取/保存它们的代码吗?
-
mat-文件是二进制的,压缩的,而txt文件是,ohm,文本,所以3到6的系数是很正常的。如果大小很重要,请使用像 .mat 这样的二进制格式。
-
这是意料之中的。文本文件将二进制表示的数字转换为字符。一个简单的例子:数字 2 可以用二进制的两位
10表示,字符“2”是十六进制。 32,即 8 个二进制位(ASCII 格式),因此大 4 倍(Unicode 格式为 16 位)。减少的一种方法是压缩(压缩)txt 文件 - 有许多可用的 python 模块,但您必须解压缩才能使用该文件。大小的减少将取决于数据。 -
@Benjamin,你知道如何以二进制形式保存数据吗?例如,我可以使用 .dat 文件进行计算。
标签: python numpy filesize file-type mat