Octave 倍频程快负载

Octave 倍频程快负载,octave,data-import,Octave,Data Import,我有大量的数据保存在一个文本文件中,我想加载到倍频程。数据太大,无法使用dlmread函数一次加载所有数据,因此目前我循环执行加载数据部分的过程;对每一部分进行计算,并;最终汇总了所有这些计算 X=dlmread(数据源,“,”,[load_指针,X_load_偏移,load_指针+load_max-1,输入_layer_大小+X_load_偏移]); y=dlmread(数据源,,,[load_指针,0,load_指针+load_最大值-1,0]) 这非常慢,我必须在代码中多次调用这个循环。正

我有大量的数据保存在一个文本文件中,我想加载到倍频程。数据太大,无法使用dlmread函数一次加载所有数据,因此目前我循环执行加载数据部分的过程;对每一部分进行计算,并;最终汇总了所有这些计算

X=dlmread(数据源,“,”,[load_指针,X_load_偏移,load_指针+load_max-1,输入_layer_大小+X_load_偏移]);
y=dlmread(数据源,,,[load_指针,0,load_指针+load_最大值-1,0])

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


谢谢,

如果您收到以下内容:

error: out of memory or dimension too large for Octave's index type
这并不意味着你没有足够的记忆力。这意味着生成的矩阵太大,无法编制索引。您已经构建了具有32位索引的八度音阶,这意味着任何内容中的最大元素数为:

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

如果您担心这个问题,我猜您会想多次加载此文件中的数据。如果是这种情况,可能更简单的方法是只读取整个文件一次(为了简单起见,只需调用
dlmread()
),然后使用
save-binary foo.dat foo
保存它。问题是,单次调用由于内存不足而崩溃(使用32位倍频程)因此,我不得不把我的东西拆开……在这种情况下,你确定你可以通过阅读片段并附在结尾来阅读全部内容吗?你也应该有同样的问题。我能想到的唯一一件事是,如果每次读取时,都将其读入单元格,但这会使数据处理变得复杂。我会将八度本机文件分块读取,但至少(一个部分的)每次加载都会更快。我想我的问题是如何在保存文件时追加?哦,别管追加了