我是Python新手的Matlab用户.我想在Matlab中将一个字符串的单元格数组写入Mat文件,并使用Python(可能是scipy.io.loadmat)将这个Mat文件加载到某个类似的类型中(例如字符串列表或字符串元组).但是loadmat将东西读入数组,我不知道如何将其转换为列表.我尝试了"tolist"函数,它不能像我预期的那样工作(我对Python数组或numpy数组的理解不够).例如:
Matlab代码:
cell_of_strings = {'thank', 'you', 'very', 'much'};
save('my.mat', 'cell_of_strings');
Run Code Online (Sandbox Code Playgroud)
Python代码:
matdata=loadmat('my.mat', chars_as_strings=1, matlab_compatible=1);
array_of_strings = matdata['cell_of_strings']
Run Code Online (Sandbox Code Playgroud)
然后,变量array_of_strings是:
array([[[[u't' u'h' u'a' u'n' u'k']], [[u'y' u'o' u'u']],
[[u'v' u'e' u'r' u'y']], [[u'm' u'u' u'c' u'h']]]], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我不知道如何将这个array_of_strings转换为Python列表或元组,以便它看起来像
list_of_strings = ['thank', 'you', 'very', 'much'];
Run Code Online (Sandbox Code Playgroud)
我不熟悉Python或numpy中的数组对象.我们将非常感谢您的帮助.
我有2个独立的Matlab工作人员,FIRST获取/保存数据和SECOND读取它(并进行一些计算等).
FIRST将数据保存为硬盘上的.mat文件,而SECOND从那里读取数据.SAVE这个数据需要大约20秒,如.mat和8millisec DELETE.在保存数据之前,FIRST会删除旧文件,然后保存更新的版本.
SECOND如何验证数据是否存在is not corrupt?我可以使用exists但不告诉我数据是否损坏.例如,如果SECOND尝试在FIRST保存时准确读取数据,则exists传递但LOAD会给出错误 - 数据损坏等.
谢谢.
我的问题是打开由Dymola生成的som*.mat文件.对于小型模式,有时候matlab打开创建的*.mat文件没有问题.然后我可以看到工作区中的结构.但我还有一个巨大的模拟模型,有31.536.000个数据点.对于这种模式,Matlab无法打开它.我总是得到提示
Error using load
Unable to read MAT-file C:\Users\Patrick\Desktop\DymolaWork\GridHH_SLP.mat
File may be corrupt.
Run Code Online (Sandbox Code Playgroud)
我的Matlab版本是2014a 64bit,我的Dymola版本是2014 FD001 64bit.我还尝试使用mathworks主页上提供的工具解决问题,以解决损坏的变量名称(loadfixnames/savebadnames).但这并不是很好.因为此工具无法恢复矩阵data_2.任何人都可以给我一个解决这个问题的建议.非常感谢你
我想知道是否有办法确定特定的MAT文件是v4,v6,v7还是v7.3?
我正在寻找一种可以使用MATLAB代码确定版本的解决方案,最好不必将数据加载到内存中.
我有非常大的.mat文件(~1.3 GB),我试图在我的Python代码(IPython笔记本)中加载.我试过了:
import scipy.io as sio
very_large = sio.loadmat('very_large.mat')
Run Code Online (Sandbox Code Playgroud)
我的笔记本电脑有8 GB RAM挂起.我保持系统监视器打开,看到内存消耗稳定增加到7 GB,然后系统冻结.
我究竟做错了什么?有什么建议/解决方法吗?
编辑:
有关数据的更多详细信息:以下是数据的链接:http://ufldl.stanford.edu/housenumbers/
我感兴趣的特定文件是extra_32x32.mat.从描述:加载.mat文件创建2个变量:X是包含图像的4-D矩阵,y是类标签的向量.为了访问图像,X(:,:,:,i)给出第i个32×32 RGB图像,其类标签为y(i).
因此,例如,当以下列方式加载时,来自同一页面(test_32x32.mat)的较小的.mat文件:
SVHN_full_test_data = sio.loadmat('test_32x32.mat')
print("\nData set = SVHN_full_test_data")
for key, value in SVHN_full_test_data.iteritems():
print("Type of", key, ":", type(SVHN_full_test_data[key]))
if str(type(SVHN_full_test_data[key])) == "<type 'numpy.ndarray'>":
print("Shape of", key, ":", SVHN_full_test_data[key].shape)
else:
print("Content:", SVHN_full_test_data[key])
Run Code Online (Sandbox Code Playgroud)
生产:
Data set = SVHN_full_test_data
Type of y : <type 'numpy.ndarray'>
Shape of y : (26032, 1)
Type of X : <type 'numpy.ndarray'>
Shape of …Run Code Online (Sandbox Code Playgroud) % save .mat file in the matlab
train_set_x=1:50*1*51*61*23;
train_set_x=reshape(train_set_x,[50,1,51,61,23]);
save(['pythonTest.mat'],'train_set_x','-v7.3');
Run Code Online (Sandbox Code Playgroud)
在matlab中获得的数据大小为(50,1,51,61,23).
我使用此链接的指令在Python中加载.mat文件.
代码如下:
import numpy as np, h5py
f = h5py.File('pythonTest.mat', 'r')
train_set_x = f.get('train_set_x')
train_set_x = np.array(train_set_x)
Run Code Online (Sandbox Code Playgroud)
train_set_x.shape的输出是(23L, 61L, 51L, 1L, 50L).预计会是(50L, 1L, 51L, 61L, 23L).所以我改变了形状
train_set_x=np.transpose(train_set_x, (4,3,2,1,0))
Run Code Online (Sandbox Code Playgroud)
我很好奇Python和matlab之间数据形状的变化.我的代码中有错误吗?
所以我一直在尝试将这个特殊的.mat文件读入R.我不太了解matlab,但我知道R.matlab包只能将未压缩的数据读入R,并将其保存为未压缩我需要通过使用在matlab中保存它
save new.mat -v6.
好吧,所以我这样做了,但是当我readMat("new.mat")在R中使用时,它只是被卡住了永远.我也尝试过使用包hdf5:
> hdf5load("new.mat", load=FALSE)->g
Error in hdf5load("new.mat", load = FALSE) :
can't handle hdf type 201331051
Run Code Online (Sandbox Code Playgroud)
我不确定这个问题是什么,但如果有人想要弄清楚这个问题,那么该文件位于http://dibernardo.tigem.it/MANTRA/MANTRA_online/Matlab_Code%26Data.html ,称为库存. mat(第一个文件).
谢谢你的帮助!
我有一个800x6元胞数组vol,其第一到第五列是双精度矩阵,第六列是200x200x2003D 双精度矩阵。我试图将其保存到一个变量,更具体地说是一个 .mat 文件。
>> save('./vol.mat', 'vol');
Warning: Variable 'vol' cannot be saved to a MAT-file whose version is older than 7.3.
To save this variable, use the -v7.3 switch.
Skipping...
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?我应该如何修复它?
PS:我不太愿意将此元胞数组保存为文本文件,因为这样做会“破坏”结构。
我有一个大数组(1024x1024x360),我想将它保存到mat文件.我试试的时候
A=rand(1024,1024,360)
save('filename.mat','A');
Run Code Online (Sandbox Code Playgroud)
变量是在工作区中创建的,文件正在创建,但它仍然是空的......我在Win7-64机器上使用Matlab 2012a,为什么会这样?
我正在运行一个m文件,创建两个变量,Clus和Watts_Map.我想将两个变量保存到以".mat"结尾的文件中.两个变量的尺寸为(1152,241,319),其中1152为360度经度,增量为0.3125度,241为纬度,30S-30N为0.25度增量,超过319个时间步长.代码一直工作到最后,我得到错误:
[Warning: Variable 'Clus' cannot be saved to a MAT-file whose version is older
than 7.3.
To save this variable, use the -v7.3 switch.
Skipping...]
[Warning: Variable 'Watts_Map' cannot be saved to a MAT-file whose version is
older than 7.3.
To save this variable, use the -v7.3 switch.
Skipping...]
Run Code Online (Sandbox Code Playgroud)
我使用的是Matlab版本R2014a,所以会认为这是最新版本.此外,我在较小的空间域(但超过2920时间步长)上运行相同的确切代码而没有错误.
% Clear all variables, initialize counter, indexed by timestep
clc;
clear all;
rain = NaN(1152,241,319);
Clus = NaN(1152,241,319);
Areas_Final = NaN(500,319);
Wattage_Final = NaN(500,319);
Cluster_size = …Run Code Online (Sandbox Code Playgroud)