Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Matlab中的.mat文件中只加载单元格的一个条目?_Matlab_Import - Fatal编程技术网

如何从Matlab中的.mat文件中只加载单元格的一个条目?

如何从Matlab中的.mat文件中只加载单元格的一个条目?,matlab,import,Matlab,Import,我有一个1乘5的单元,包含5个非常大的矩阵。我怎么能只加载我想要的一个矩阵,而不是加载整个单元格,这会占用我大部分的内存 大概是 M2 = load('Cellmat{2}'); 应将M2定义为单元格Cellmat中的第二个矩阵,该矩阵先前已通过save('Cellmat','Cellmat')保存到目录中完成此操作的唯一方法是使用读取文件,因为这样只允许读取。它还假设文件最初是以7.3格式保存的 matfile仅支持7.3版格式的MAT文件的有效部分加载和保存。如果索引到版本7(当前默认值)

我有一个1乘5的单元,包含5个非常大的矩阵。我怎么能只加载我想要的一个矩阵,而不是加载整个单元格,这会占用我大部分的内存

大概是

M2 = load('Cellmat{2}');

应将
M2
定义为单元格
Cellmat
中的第二个矩阵,该矩阵先前已通过
save('Cellmat','Cellmat')保存到目录中

完成此操作的唯一方法是使用读取文件,因为这样只允许读取。它还假设文件最初是以
7.3
格式保存的

matfile
仅支持7.3版格式的MAT文件的有效部分加载和保存。如果索引到版本7(当前默认值)或早期MAT文件中的变量,MATLAB®将发出警告并临时加载变量的全部内容

因此,为了最初保存数据,您需要指定
-7.3
标志

save('Cellmat.mat', 'Cellmat', '-v7.3')
然后可以使用
matfile
Cellmat
加载所需的元素。请注意,您必须使用
()
索引来访问它(这将生成一个单元格,然后我们可以将其索引到
M2
),并且在索引到
Cellmat
时,您必须指定行和列下标

mat = matfile('Cellmat.mat');

% A little workaround because you can't use {} indexing on matfile objects
tmp = mat.Cellmat(1, 2);
M2 = tmp{1};
“老派”的替代方案是将单元格数组分解为单独的变量,并仅保存/加载这些变量

thing = Cellmat{1};
other_thing = Cellmat{2};

save('Cellmat.mat', 'thing', 'other_thing');

% Only load in one variable
M2 = load('Cellmat.mat', 'other_thing');

谢谢,成功了!看起来很奇怪,Matlab没有一个标准的方法来做这件事。@Lovsovs这是做这件事的标准方法。在
matfile
之前,我们必须使用多个变量,正如我在上一版中所展示的那样,我确信这是最好的方法,我不是这个意思。。我只是认为它仍然是一种“黑客”的方式(使用v7.3和tmp以及所有的jazz),也就是说,IMO Matlab应该有一种更直观的方式来实现同样的功能。再次感谢。:)@Lovsovs很好,因此7.3将其保存为HDF5文件,这是一种更模块化的数据类型,允许更好地随机访问数据。而
()
索引(产生
tmp
)是存储方式的产物。要了解更多关于这些文件的内部内容,您可以查看它