八度更快的加载

Octave faster load

我在文本文件中保存了大量数据,我想将其加载到 Octave 中。数据太大,无法使用 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]);

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

谢谢,

如果你得到类似的东西:

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]);
[...]