use*_*196 7 matlab loading python-3.x
我目前正在学习神经网络课程,我正在尝试.mat使用从 Python加载文件scipy.io.loadmat(filename),但我不断收到以下错误消息:
ValueError:未知的 mat 文件类型,版本 101、58
当我尝试使用 .m 文件加载 .m 文件而不是.mat文件时,出现了相同的消息scipy.io.loadmat()。
我不知道如何解决这个问题,所以如果这里有人可以帮助我,我将不胜感激。
(将我的评论转换为答案)
一个.m文件是一个 matlab/octave 脚本。您不“加载”脚本。即使在 matlab/octave 中也没有。您只能运行它,这可能会或可能不会导致您可以将其保存到文件中的特定工作区.mat。
python 有“matlab 接口”,您可以使用它.m在 python 会话中运行文件,例如官方的MATLAB Engine API for Python,或者如果您有较旧的 matlab 版本,您可以尝试在线查找其他 python matlab 接口(a简单的谷歌搜索给了我pymatlab,mlab,mlabwrap等)。如果您的 .m 文件与 Octave 兼容(并且您安装了 Octave),您还可以尝试oct2py界面,该界面运行良好。安装这些接口之一后,您可以尝试运行脚本,然后将工作区变量传输到 python,或者使用该接口保存到 .mat 文件,然后scipy.io.loadmat正常使用将其加载回 python。
至于 .mat 文件给你一个错误,最可能的原因是它是 .mat 规范的较新版本,python 尚无法识别(你使用的是哪个 matlab 版本?)。尝试在 matlab(或八度)中加载 .mat 文件并使用 -v7 选项再次保存。然后 Python 应该可以毫无问题地打开它。
编辑:这是一个通过 oct2py 运行八度音程脚本的示例,将生成的八度音程工作空间保存到文件中.mat,并将该.mat文件加载到 python 中。
%% file myscript.m located at /home/tasos/Desktop
a = 1
b = 2
c = 3
Run Code Online (Sandbox Code Playgroud)
# from python:
from oct2py import octave as oct
oct.eval("cd /home/tasos/Desktop")
oct.eval("myscript")
oct.eval("save -v7 myworkspace.mat")
from scipy.io import loadmat
D = loadmat("/home/tasos/Desktop/myworkspace.mat")
print D.keys()
#>>> ['a', 'c', 'b', '__header__', '__globals__', 'ans', '__version__']
print D['a'], D['b'], D['c']
#>>> [[ 1.]] [[ 2.]] [[ 3.]]
Run Code Online (Sandbox Code Playgroud)