注意: 这个问题涉及2011年使用旧的MATLAB版本(R2009a)观察到的问题.根据2016年7月以下的更新,MATLAB中的问题/错误似乎不再存在(使用R2016a进行测试;向下滚动到问题末尾以查看更新).
我正在使用MATLAB R2009b,我需要编写一个更大的脚本,将更大的.zip文件集的内容转换为v7.3 mat文件(带有底层的HDF5-datamodel).读书还可以.问题在于储蓄.实际上没有问题.使用save命令可以很好地保存我的文件.
从某种意义上说,我的问题更多:为什么我在MATLAB中观察到以下令人惊讶的(对我来说)行为?
让我们来看看我的问题.在当前的测试场景中,我将生成一个输出:A -v7.3 mat-file.此.mat文件将包含40 个块作为单个变量.每个变量将从1到40命名为"block_NNN",并包含一个带字段frame和blockNo的结构.场帧包含480x240x65的uint8 imagedata序列(这里只是使用randi生成的随机数据).字段块不包含块编号.
备注:在真实的脚本中(我还没有完成)我将完成上述总共370次,转换总共108GB的原始数据.这就是为什么我关注以下内容.
无论如何,首先我定义一些通用变量:
% some sizes for dummy data and loops: num_blockCount = 40; num_blockLength = 65; num_frameHeight = 480; num_frameWidth = 240;
然后,我生成一些形状和大小与实际原始数据相同的虚拟代码:
% generate empty struct:
stu_data2disk = struct();
% loop over blocks:
for num_k = 1:num_blockCount
% generate block-name:
temp_str_blockName = sprintf('block_%03u', num_k);
% generate temp struct for current block:
temp_stu_value … 我有一个从matlab 2012b生成的.mat文件.它包含一个带有用户定义的matlab类的变量.
在python 3.3中使用scipy.io.loadmat加载文件时,我得到以下内容:
mat=scipy.io.loadmat('D:\test.mat')
mat
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Feb 22 15:26:28 2013', '__function_workspace__': array([[ 0, 1, 73, ..., 0, 0, 0]], dtype=uint8), '__globals__': [], '__version__': '1.0', 'None': MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])],
dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])}
Run Code Online (Sandbox Code Playgroud)
我希望访问类型为"cStream"的"futureDS"对象,但似乎无法使用mat ['None']这样做.调用mat ['None']简单导致:
MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])],
dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])
Run Code Online (Sandbox Code Playgroud)
我被困在这里.我是python的新手,并试图从matlab移植我的旧工作.任何帮助,将不胜感激.
谢谢.
我有一些数据,我想保存到MAT文件(版本4或5,或任何版本,就此而言).问题:我想在不使用matlab库的情况下这样做,因为这个代码不需要在带有matlab的机器上运行.我的程序使用Java和C++,因此用这些语言实现的任何现有库都可以帮助我...
我做了一些研究但没有在Java/C++中找到任何东西.但是,我发现python上的scipy用mio4.py或实现了这个mio5.py.我想过在java或C++上实现它,但它似乎有点超出我的时间表.
所以问题是:Java或C/C++中是否有允许在不使用Matlab库的情况下保存MAT文件的库?
非常感谢
我有一个我使用的mat文件
from scipy import io
mat = io.loadmat('example.mat')
Run Code Online (Sandbox Code Playgroud)
从matlab开始,example.mat包含以下结构
>> load example.mat
>> data1
data1 =
LAT: [53x1 double]
LON: [53x1 double]
TIME: [53x1 double]
units: {3x1 cell}
>> data2
data2 =
LAT: [100x1 double]
LON: [100x1 double]
TIME: [100x1 double]
units: {3x1 cell}
Run Code Online (Sandbox Code Playgroud)
在matlab中,我可以像data2.LON一样轻松访问数据.它在python中并不是那么简单.虽然喜欢它,但它给了我几个选项
mat.clear mat.get mat.iteritems mat.keys mat.setdefault mat.viewitems
mat.copy mat.has_key mat.iterkeys mat.pop mat.update mat.viewkeys
mat.fromkeys mat.items mat.itervalues mat.popitem mat.values mat.viewvalues
Run Code Online (Sandbox Code Playgroud)
有可能在python中保留相同的结构吗?如果没有,如何最好地访问数据?我正在使用的当前python代码非常难以使用.
谢谢
我在MATLAB中生成了一些我想用Perl处理的数据.我将MATLAB中的数据保存在.mat文件中.有没有办法在Perl中阅读它?
我有一个矩阵形式的大型MATLAB文件(150MB)(即4070x4070).我需要在MATLAB中处理这个文件,但我似乎无法加载这个文件.我收到了"内存不足"的错误.有没有其他方法可以加载这个大小的文件?我使用的是32位处理器,并且有2GB的RAM.请帮助我,我在处理这个问题时已经筋疲力尽了.
这是我得到的错误的最小例子.如果我正确理解文档,这应该是有效的,但似乎我没有.
a={}
a['test1']=1
a['test2']=2
a['test3']=3
import scipy.io as io
io.savemat('temp',{'a':a})
b = io.loadmat('temp')
b['a'].keys()
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'keys'
Run Code Online (Sandbox Code Playgroud) 我有一个我想要处理的大.mat文件,但是它太大而不适合单个加载.我想加载它的部分,每次只访问重要的参数.所以我几乎有两个问题:
谢谢!
按照这个问题(并回答)如何读取使用Scipy在Matlab中创建的.mat文件,我想知道如何访问导入结构中的字段.
我在Matlab中有一个文件,我可以从中导入一个结构:
>> load bla % imports a struct called G
>> G
G =
Inp: [40x40x2016 uint8]
Tgt: [8x2016 double]
Ltr: [1x2016 double]
Relevant: [1 2 3 4 5 6 7 8]
Run Code Online (Sandbox Code Playgroud)
现在我想在Python中做同样的事情:
x = scipy.io.loadmat('bla.mat')
>>> x
{'__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 07 21:17:24 2006', 'G': array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object), '__globals__': []}
>>> x['G']
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object)
>>> G = x['G']
>>> G
array([[<scipy.io.matlab.mio5.mat_struct object at …Run Code Online (Sandbox Code Playgroud) 我试图使用scipy.io.loadmat从.mat文件中加载一个基本字典temp = {'key':array([1,2])}.将loadmat()返回的Python字典文件中的键转换为变量名称,其值与表示键相同.
例如:
temp = {'key':array([1,2])}
Run Code Online (Sandbox Code Playgroud)
转换成
key = array([1,2])
Run Code Online (Sandbox Code Playgroud)
我知道如何使用temp.keys()获取密钥.然后抓取项目很简单,但是如何强制temp.keys()中的字符串列表是变量名而不是字符串.
我希望这是有道理的,但这可能很容易,我只是想不出怎么做.
干杯