scilab save('-append') 似乎不起作用

scilab save('-append') doesn't seem to work

我正在尝试使用 Scilab 创建 ML 数据集,我需要在数据生成期间保存,因为它对于 Scilab 的最大堆栈来说太大了。 这是我用来找出问题所在的玩具示例,但我无法弄清楚

datas=[];
labels=[];
for i =1:10
    for j=1:100
        if j==1
            disp(i)
        end
        data = sin(-%pi:0.01:%pi);
        label = rand();
        datas = [datas, data];
        labels = [labels, label];
    end
    save(chemin+'\test.h5','-append','datas','labels')
    datas = [];
    labels = [];
end

我正在寻找最后的数据形状 [1000,629],但我得到 [62900,0]

你知道这是为什么吗?

您必须垂直连接(分号)而不是水平连接(逗号)

datas = [datas; data];
labels = [labels; label];

顺便说一句,这不会解决您的内存问题,因为矩阵在 Scilab 的工作区中增长并且使用“-append”只是将对象写入 hdf5 文件(您使用相同的名称)。

下面是一个如何在没有任何内存压力的情况下增量保存大矩阵的示例:

// create a new HDF5 file
a = h5open(TMPDIR + "/test.h5", "w")

// create the dataset

N = 3; // number of chuncks
nrows = 5;  // rows of a single chunk
ncols = 10; // cols of a single chunk
chsize = [nrows, ncols];
maxrows = N*nrows; // final number of rows of concatenated matrix
maxcols = ncols;   // final number of cols of concatenated matrix


for k=1:N
    // warning, x is viewed as a C-matrix (row-major), transpose if applicable
    x = rand(nrows,ncols);
    h5dataset(a, "My_Dataset", ...
              [chsize ;1 1 ;1 1 ;chsize ;chsize],...
              x, ...
              [k*nrows ncols; maxrows maxcols; 1+(k-1)*nrows 1 ;1 1 ;chsize; chsize])
    h5dump(a, "My_Dataset");
end

disp(a.root.My_Dataset.data)

h5close(a)