我正在使用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]])