我有一个大型数组/矩阵,包含5899091行和11列。我将它存储在一个文本文件中。 在matlab中使用dlmread()方法我每次需要它时都会读它。但是,这需要花费很多时间(超过1分钟)。我需要一次又一次地读取文件。我陷入了这种境地。我的问题是:
1)有没有办法只读一次文件并将其保存在任何类型的全局/持久矩阵中?
2)有没有更好的方法来阅读文本文件并以更有效的方式将其转换为矩阵?
提前致谢。
答案 0 :(得分:1)
您可以从内存映射文件中获得所需的性能。研究Matlab函数memmapfile
。这不是我用得多的东西所以不会提供任何可能错误的进一步建议。
答案 1 :(得分:1)
最好的选择几乎可以肯定是在脚本或控制函数中简单地读取一次文件,然后将其作为变量传递给任何需要该数据的后续函数。这与添加全局声明一样多,并且更清晰,更易于维护和更灵活。
您也可以将变量保存到MAT文件中。如果文件中的每个元素都是double
类型,那么它的大小应该超过4GB。 MAT格式是有效的,但主要的好处是将您的数字存储为数字而不是文本。对于5或8位有效数字,ASCII中的相同数字分别为6.2或9.3 GB。
如果由于某种原因你真的不想将数据作为变量传递,我会推荐嵌套函数而不是全局变量:
function aResult = aFunction(var)
data = dlmread(...);
var4 = bFunction(var);
function bResult = bFunction(var)
var4 = cFunction(data);
end
end
当然,此时您仍然将业务功能包装在某些东西中。 scoping rules很有帮助。
现在,如果真正的问题只是这个文件的大小 - 也就是说,它对于内存来说太大了,你使用dlmread
的范围参数来以块的形式访问文件 - 那么你应该花时间design a format与memmapfile
一起使用。这个Wikipedia page解释了潜在的好处。
答案 2 :(得分:0)
答案 3 :(得分:0)