八度加载更快

时间:2015-10-13 17:28:12

标签: octave data-import

我在文本文件中保存了大量数据,我想将其加载到八度音程中。数据太大,无法使用dlmread函数同时加载所有内容,所以当我循环执行加载数据部分的过程时;对每个部分进行计算;最终聚合所有这些计算。

X = dlmread(data_source, ",", [load_pointer, x_load_offset, load_pointer + load_max - 1, input_layer_size + x_load_offset]); y = dlmread(data_source, ",", [load_pointer, 0, load_pointer + load_max - 1, 0]);

这非常慢,我必须在我的代码中多次调用此循环。我正在考虑将原始数据转换为八度原生格式以加快此过程,但不确定如何做到这一点,特别是考虑到我无法一次加载原始数据(即需要加载部分数据,保存和追加)我的下一个加载/保存)。任何人都可以帮忙吗?

感谢,

1 个答案:

答案 0 :(得分:0)

如果您得到类似的内容:

error: out of memory or dimension too large for Octave's index type

并不意味着你没有足够的记忆力。这意味着生成的矩阵太大而无法索引。您已经构建了具有32位索引的Octave,这意味着任何内容中的最大元素数为:

octave> sizemax 
ans = 2147483646

最终结果是,无论您是在块上还是一次性读取它都无关紧要,如果有更多元素,您将无法拥有包含所有数据的单个数组。 sizemax限制(稀疏矩阵的例外)。

你可以做的是将你的数据块读入一个单元格数组。这将使您想要对我们的数据进行的任何进一步分析复杂化。阅读的最佳方式取决于您的问题。如果要比较同一列中的所有内容,可以将每列放入一个单元格元素中,如下所示:

data = cell (1, ncolumns);
data(1) = csvread (data_source, [0 0 double(sizemax) 0]);
data(2) = csvread (data_source, [0 1 double(sizemax) 1]);
[...]