有没有人在Python中阅读二进制Matlab .mat文件的成功经验?
(我已经看到有人loadmat()声称支持读取.mat文件,但是我没有成功.我安装了loadmat()0.7.0版,我找不到loadmat()方法)
我正在尝试使用以下代码读取matlab文件
import scipy.io
mat = scipy.io.loadmat('test.mat')
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误
raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files
Run Code Online (Sandbox Code Playgroud)
所以任何人都可以遇到同样的问题,并可以取悦任何示例代码
谢谢
在官方文件规定如下:
.但我注意到除了上表中所述的其他重要区别之外.
例如,在MATLAB中保存一个占用176 MB内存的大约6,000个元素的单元格数组,根据我是使用-v7还是-v7.3,给出了以下结果:
有没有人注意到这些差异?
更新1:正如回复指出的那样,-v7.3依赖于HDF5并且根据Mathworks,"这种格式具有显着的存储开销",尽管不清楚这种开销是否真的是由于格式本身,还是由于MATLAB相反,实现和处理HDF5.
更新2:@Andrew Janke向我们指出了这个非常有用的PDF(显然在网上没有HTML格式).有关更多详细信息,请参阅@Amro提供的答案中的注释.
这一切都需要我下一个问题:是否有任何替代方案,结合了两者的优点(如效率-V7和处理大量文件的能力- 7.3版)?
我有一个".mat"文件,我想打开并查看其中的内容.由于我没有MATLAB,我下载了GNU的Octave.由于我正在使用Mac的TERMINAL,我不确定如何打开".mat"文件以便我可以看到内容.谁能帮我这个?谢谢!
有没有人知道如何从matlab文件中删除变量?我知道您可以使用该save -append方法将变量添加到现有的matlab文件中,但是没有关于如何从文件中删除变量的文档.
在有人说"只是保存它"之前,它是因为我将中间处理步骤保存到磁盘以缓解内存问题,最终每个分析例程将有近10 GB的中间数据.谢谢!
更新:这是一个很长的问题归结为,有人可以向我解释numpy数组类吗?我在下面回答了我自己的问题.
我正在开发一个项目,将数据从matlab导入到mysql数据库,其内容将通过django网站提供.我想使用Scipy.io.loadmat将matlab中的信息转换为我可以在python中使用的表单,以便我可以使用django api将数据输入到数据库中.
我的问题是我无法使用scipy.io.loadmat导入的数据.它以几个嵌套数组的形式加载,一些变量名似乎丢失了.
这是我为试验创建的测试结构的matlab代码:
sensors.time = [0:1:10].';
sensors.sensor1 = {};
sensors.sensor1.source_type = 'flight';
sensors.sensor1.source_name = 'flight-2';
sensors.sensor1.channels = {};
sensors.sensor1.channels.channel1.name = '1';
sensors.sensor1.channels.channel1.local_ori = 'lateral';
sensors.sensor1.channels.channel1.vehicle_ori = 'axial';
sensors.sensor1.channels.channel1.signals = {};
sensors.sensor1.channels.channel1.signals.signal1.filtered = 'N';
sensors.sensor1.channels.channel1.signals.signal1.filtered_description = 'none';
sensors.sensor1.channels.channel1.signals.signal1.data = sin(sensors.time)+0.1*rand(11,1);
>> sensors
time: [11x1 double]
sensor1: [1x1 struct]
>> sensors.sensor1
source_type: 'flight'
source_name: 'flight-2'
channels: [1x1 struct]
>> sensors.sensor1.channels
channel1: [1x1 struct]
>> sensors.sensor1.channels.channel1
name: '1'
local_ori: 'lateral'
vehicle_ori: 'axial'
signals: [1x1 struct]
>> sensors.sensor1.channels.channel1.signals
signal1: [1x1 struct]
>> …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来列出两个.mat文件之间的差异,这对许多人来说都是有用的.
虽然我搜遍了我能想到的任何地方,但我找不到任何符合我要求的东西:
我最接近的是visdiff.只要我留在matlab中,它就可以让我浏览差异,但是当我保存结果时它只显示我的最高级别.
以下是我的文件通常如下所示的简化示例:
a = 6;
b.c.d = 7;
b.c.e = 'x';
save f1
f = a;
clear a
b.c.e = 'y';
save f2
visdiff('f1.mat','f2.mat')
Run Code Online (Sandbox Code Playgroud)
如果我点击这里b,我可以找到差异.但是如果我运行它并使用'file> save',我无法点击b.因此,我仍然不知道改变了什么.
注意:我没有Simulink
因此我的问题是:
如何在没有Matlab的情况下向2人显示2个mat文件之间的所有差异
以下是我个人认为最适合不同情况的答案:
我正在尝试使用scipy.io将文本字符串列表从Python导出到MATLAB.我想使用scipy.io,因为我想要的.mat文件应该包括数值矩阵(我在这里学到了)和文本单元格数组.
我试过了:
import scipy.io
my_list = ['abc', 'def', 'ghi']
scipy.io.savemat('test.mat', mdict={'my_list': my_list})
Run Code Online (Sandbox Code Playgroud)
在MATLAB中,我加载test.mat并获取一个字符数组:
my_list =
adg
beh
cfi
Run Code Online (Sandbox Code Playgroud)
如何让scipy.io将列表导出到MATLAB单元格数组中?
我在MAT文件中有一个大型结构.我想检查结构中是否存在特定字段而不加载MAT文件,因为内容非常大,我想最小化内存使用.
这是可能的,还是我必须先加载它,如下例所示?:
load('test.mat'); %# Load the MAT-file
tf = isfield(s,'fieldname'); %# Check if structure s has field 'fieldname'
Run Code Online (Sandbox Code Playgroud) 我确信这是一个简单的问题,但我找不到明显的解决方案.我在matlab中生成了一系列模型输出数组文件(dim 180,360,12),我需要在R中打开它.
我试图使用R.matlab包,只需使用readMat命令,这就产生了一个列表对象.尝试将此列表写入矩阵会导致内存分配错误.
我曾尝试过不公开,但这也没有帮助.
如何打开这些matlab矩阵文件并在R中写为矩阵?有什么想法吗?
到目前为止,matlab读取的代码很简单:
> data<-readMat("filename")
> typeof(data)
[1] "list"
> str(data)
List of 1
$ pco2: num [1:180, 1:360, 1:12] NaN NaN NaN NaN NaN ...
- attr(*, "header")=List of 3
..$ description: chr "MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Thu Jul 26 10:36:42 2012 "
..$ version : chr "5"
..$ endian : chr "little
Run Code Online (Sandbox Code Playgroud)