在python中将数据导出到.mat文件

时间:2015-05-25 18:31:20

标签: python matlab io scipy

我正在使用python中的一个脚本,我可以将ls输出传递给脚本并使用scipy.io在python中打开我想要使用的所有文件,然后我想要全部导入的数据,并将它们分配到.mat文件中(再次使用scipy.io)。我已成功导入数据并将其分配给要导出的字典,但是当我在MATLAB中加载输出文件时,没有任何数据看起来都是一样的。

我导入的数据都附有一个lat / lon坐标,因此我将使用该数据作为示例。数据来自netCDF(.nc)文件:

    #!/usr/bin/python
    import sys
    import scipy.io as sio
    import numpy as np

    # script take absolute path inputs (or absolute paths are desirable)
    # to access an abolute path on a linux systen use the command:
    # ls -d $PWD/* OR if files not in PWD then ls -d /absolute_file_path/*
    # and then pipe the standard output of that to input of this script

    # initialize dictionary (param) and cycle number (i.e. datafile number)
    cycle = []
    param = {}

    # read each file from stdin
    for filename in sys.stdin:
        fh = sio.netcdf.netcdf_file(filename,'r')
        # load in standard variables (coordinates)
        latitude = fh.variables['LATITUDE'][:]
        longitude = fh.variables['LONGITUDE'][:]

        # close file
        fh.close()

        # get file number (cycle number)
        cycle = filename[-7:-4]

        # add latest imported coordinate to dictionary
        latvar = 'lat' + cycle
        lonvar = 'lon' + cycle
        param.update({latvar:latitude})
        param.update({lonvar:longitude})

    # export dictionary to .mat file
    sio.savemat('test.mat',param)

当我打印值以检查它们是否正确导入时,我得到了合理的值 - 但是当我在MATLAB中打开导出的值时,这是我的输出示例:

    >> lat001

    lat001 =

     -3.5746e-133

和其他变量具有相似的大指数值(有时非常小,如本例中有时非常大~1e100)。

我尝试过寻找类似的问题,但我遇到的一些问题是,有些问题已经将大量数据分配给单个.mat文件(例如超过2 ** 32-1字节的数组)。

编辑:一些示例输出(在python中加载文件,数据类型)

    print latitude
        [ 43.091]

    print type(latitude)
        <type 'numpy.ndarray'>

    data = sio.loadmat('test.mat')
    print data['lat001']
        array([[ -3.57459142e-133]])

0 个答案:

没有答案