我正在运行一个模拟,其中生成巨大的二维稀疏矩阵,因此我使用 FIND 函数仅存储非零值及其索引。
现在,对于 for 循环的每次迭代,我都会生成这样的矩阵,因为它们的长度都不同,所以我使用元胞数组来存储这些配置。但对于大型模拟,即使单元格数组的压缩格式也会超出其内存限制,因此我想在运行代码时编写这些单元格数组,即每次迭代都将一个新元素附加到现有的 mat 文件中。
for e.g.
for n=1:10
A=rand(5);
[i,j,vals]=find(A);
data={[i,j,vals]};
save('data','data','-append');
end
这里我的最终目标是拥有一个 mat 文件,其中“data”中的元素数量为 10。但是由于内存问题,我无法将其保存在 for 循环之外我想生成 data{n} 并以按列增长的方式附加它。最终给了我数据{10}。
我尝试使用 MATFILE 但它给了我错误,它不能与 {} 一起使用,因此不能与元胞数组一起使用。
谢谢你,
镍丁
只要您不尝试索引实际单元格,就可以将 matfile 与单元格一起使用。请记住,单元格仍然是数组,因此您可以使用数组索引访问每个单元格。例如:
>> x = {'this', 'is', 'an', 'example'};
>> x{4}
ans =
example
>> x(4)
ans =
'example'
下面只是初始化数据。确保使用“-v7.3”标签保存它,以便它支持高效的部分保存和加载。
data = {};
save('data.mat', 'data', '-v7.3');
现在您可以使用 matfile 访问您的数据
mf = matfile('data.mat', 'Writable', true);
for n=1:10
A=rand(5);
[i,j,vals]=find(A);
data={[i,j,vals]};
mf.data(end+1, 1) = data;
end
参考:matfile文档
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)