【发布时间】:2014-07-27 18:51:56
【问题描述】:
我正在运行一个模拟,其中我生成巨大的 2d 稀疏矩阵,因此我使用 FIND 函数仅存储非零值及其索引。
现在对于 for 循环的每次迭代,我都会生成这样的矩阵,并且因为它们的长度都不同,所以我使用单元数组来存储这些配置。但是对于大型模拟,即使单元格数组的压缩格式也会超出其内存限制,因此我想在运行代码时编写这些单元格数组,即每次迭代都将一个新元素附加到现有的 mat 文件中。
例如
for n=1:10
A=rand(5);
[i,j,vals]=find(A);
data={[i,j,vals]};
save('data','data','-append');
end
我的最终目标是创建一个 mat 文件,其中“数据”中的元素数量为 10。但由于内存问题,我无法将其保存在 for 循环之外,我想生成数据 {n} 并将其附加到逐列增长的时尚。最终给了我数据{10}。
我尝试使用 MATFILE,但它给我的错误是它不适用于 {},因此不适用于元胞数组。
谢谢你, 尼丁
【问题讨论】:
-
这是一个非常好的问题。尽管我不知道如何解决您的问题,但我只想问您为什么打算这样做。如果您在保存变量时遇到这个问题,那么您将来在加载时也会遇到它。因此,您应该避免这种情况。为什么不按照 Luis Mendo 的建议保存它?
-
使用 MATFILE 函数(如果它适用于单元格数组),如果我得到它写入 .mat 文件的一部分,那么我也可以在不加载文件的情况下读取文件的一部分。因此,我想要的只是 MATFILE 可以与单元数组一起使用。
-
我很好奇你为什么不使用 MATLAB 的原生稀疏格式而不是滚动你自己的格式。
标签: matlab cell-array mat-file