【发布时间】:2013-06-09 01:31:21
【问题描述】:
一般编程问题,但可能有针对 Matlab 的特定注意事项。
我将导入非常大的数据文件。将整个文件导入内存然后将其划分为子矩阵是更好的做法/更快/更有效,还是只将每 n 列导入一个新矩阵?
我的猜测是,将它全部加载到缓存中然后处理它会更快,但这只是一个没有根据的猜测。
【问题讨论】:
-
你的数据文件是什么格式的?它是文本文件、ASCII 分隔的数字文件还是 CSV 文件? MATLAB 内置了几种数据类型的专用处理程序,它们使用与 C 类似的语法,即打开文件流,从文件流中读取,最后关闭文件流。我认为其中之一将是您最好的选择。
-
你能指定你将如何处理矩阵吗?如果目标只是将矩阵加载到内存中而不进行计算,我看不出有任何理由利用缓存。
-
您好,感谢您的评论,工程师。我目前正在编写我的代码,假设数据是 CSV。我正在做的是说
data = csvread('filename'),然后将数据矩阵分成几个矩阵。说:matrix_1_2 = data(:,1:2)等。这是否比只扫描前两列、保存它们、然后扫描第二对列等更好? -
大匡:会有很多矩阵运算和乘法。我猜最有效的方法是甚至不分割大矩阵,而是在计算中使用它的子集(例如
resultingMatrix = data(:,1:n) .* data(:,n+1:2*n),但这会使代码对其他人来说不太清晰) -
尽可能以最简单、最易读的方式编写代码。如果数据可以轻松地放入主内存中,那么您会没事的。如果不是这样,您将处于一个受伤的世界,您将需要更好的磁盘存储格式(二进制)和对批量数据进行操作的阻塞算法。您当然不想多次解析 CSV 的每一行,按列阻塞就可以了。
标签: performance matlab import