python - 从 .mat 文件转换为 .txt 文件后文件大小增加

标签 python numpy filesize file-type mat

我有很多 .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 是二进制格式,而 numpy.savetxt() 写入纯文本文件。 double (IEEE 754 double )的二进制表示形式占用 8 个字节。默认情况下,numpy 将其保存为 0.000000000000000000e+00 格式的纯文本,结果为 24 个字节。

有许多附加效果会影响生成的文件大小。例如。文件格式的结构开销、压缩、用于写入纯文本的格式(十进制位数)。但是,就您而言,我怀疑主要影响只是数字的二进制表示形式和纯文本表示形式之间的差异。

如果您想减小文件大小,则应使用不同的输出格式。可能的选项是:

  • 编写一个压缩文本文件:

    import gzip
    with open('data.txt.gz', 'wb') as f:
        numpy.savetxt(f, myarray)
    
  • 再次另存为.mat。请参阅scipy.io.savemat()

  • 编写专有的二进制 numpy 格式 (.npy)。请参阅numpy.save()
  • 编写专有的二进制压缩 numpy 格式 (.npz)。请参阅numpy.savez_compressed()
  • 如果您有大量结构化数据,请考虑使用 HDF5 file format .
  • 如果您需要编写自己的二进制格式,请使用 struct.pack()并将结果字节写入文件。

选择哪个选项取决于您的情况:之后谁必须读取数据?压缩因子有多重要?您的数据只是一个数组还是结构更复杂?

关于python - 从 .mat 文件转换为 .txt 文件后文件大小增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038393/

相关文章:

python - numpy 广播如何执行得更快?

python - 可读的对象列表

python - 如何在Python中将一维径向轮廓转换为二维数组

python - Matlab 和 Python 中的 LASSO 回归结果不同

node.js - 如何在 Node.js 中检查文件的大小?

python - 在 Python 中对日期进行排序

python - 如何生成不同的车牌并将它们保存到文件中?

python - 替换numpy数组值python

matlab - 绘制大量数据时如何减小打印的 eps 的大小

c# - 将日志文件保持在一定大小以下