在 Matlab 中保存一个大单元矩阵(字符串变量)非常慢且大小很大
Posted
技术标签:
【中文标题】在 Matlab 中保存一个大单元矩阵(字符串变量)非常慢且大小很大【英文标题】:save a large cell matrix (string variables) in Matlab is very slow and size is massive 【发布时间】:2014-08-25 16:54:58 【问题描述】:我有一个包含 40,000,000 行的大单元矩阵(字符串变量)。我首先使用 whos('file') 检查大小,它告诉我工作区中矩阵的大小为 4.5GB。然后,我使用 'save('file',-v7.3) 将其导出到 .mat 文件。花了这么长时间,10分钟后还在保存,所以我检查了目标目录中的文件,文件大小已经12GB并且还在增加。谁能告诉我发生了什么?有没有其他方法可以保存这个矩阵?它不需要是 .mat 文件,可以是 .txt 或其他文件。
矩阵的一小部分。 '00086810' '00192610' '00213T10' '00339010' '00350L10' '00350P10' '00428010' '00431F10' '00433710' '00723110' '00743710' '00818210' '00818810' '01031710' '01204610' '01747610' '01747F10' '01852Q10' '01853510' '01887110' '01888510' '01890A10' '01920510' '02316010' '02343R10' '02361310' '02391210' '02407310' '02407640' '02408H10' '02434310' '02520W10' '02581610'
【问题讨论】:
我不知道你的文件大小,但我相信这需要时间。我需要 10 分钟才能将硬盘中的 4GB 从一个地方移动到另一个地方。如果你想更快购买 SSD 运行save('file',-v7.3)
时工作区中是否还有其他变量?因为这会将它们全部保存在一个名为文件的 matfile 中,请尝试save('file','file','-v7.3')
...(第一个输入是文件名)
里面的所有单元格都是8 char
long吗?
Re Ander:矩阵在工作空间中被命名为 st_nonfin。所以我只写了这个'save('st_nonfin','-v7.3')'。它还在节省,现在 30GB!
Re Divakar:一些变量小于 8 个字符
【参考方案1】:
让我们测试
test='helloooooo'
whos('test')
Name Size Bytes Class Attributes
test 1x10 20 char
save('A','test')
size A file 184 bytes
让我们测试更大的数据。
symbols = ['a':'z' 'A':'Z' '0':'9'];
MAX_ST_LENGTH = 500;
stLength = randi(MAX_ST_LENGTH);
for ii=1:100
nums = randi(numel(symbols),[1 stLength]);
testcellii = symbols (nums);
end
save('test','testcell')
whos('testcell')
Name Size Bytes Class Attributes
testcell 1x100 52200 cell
文件大小 15.7Kb
它压缩数据。但我意识到这取决于数据。但是通常我得到 x3 压缩
你能告诉我们你的代码吗,也许你保存错误
【讨论】:
你能显示从 2 个字符串的元胞数组到 3 个字符串的元胞数组的增加吗?现在我们可能只关注启动开销。以上是关于在 Matlab 中保存一个大单元矩阵(字符串变量)非常慢且大小很大的主要内容,如果未能解决你的问题,请参考以下文章