在 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 charlong吗? 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 中保存一个大单元矩阵(字符串变量)非常慢且大小很大的主要内容,如果未能解决你的问题,请参考以下文章

在单元格中使用字符串保存 Matlab 变量

Matlab保存忽略大单元格数组

在 MatLab 中保存矩阵

matlab中如何保存数据到指定文件夹中?

matlab中的元胞数组中的数字是字符型保存,存在nodata。。如何转换成数值型矩阵????

matlab 如何输入若干个 参数变量保存到矩阵中