1

我写了一个用于分类的 Matlab 脚本。当我执行此操作时,出现内存不足错误。

for i =1:size(Y)  
    if(predictions(i) ~= clasL(find(ismember(mydata,X(i)),'rows')))  
        error = error+1;  
    end  
end

在上面的代码中Y,andpredictions是维度为 19928 的向量。and是 19928*62061mydataX12819*62061 矩阵。当我执行以下代码时,出现以下错误

Error using  == 
Out of memory. Type HELP MEMORY for your options.

Error in ismember (line 62)
            tf = (a == s);

Error in myinit (line 105)
if(predictions(i) ~= clasL(find(ismember(mydata,X(i)),1)))

如何克服这一点?请帮我。谢谢

4

1 回答 1

1

首先尝试在 MATLAB 进程上运行 ulimit,以便它可以使用尽可能多的内存。

其次,我认为您想将参数的顺序切换为ismember

ismember(X(i, :), mydata, 'rows')

find第三,如果您更改参数的顺序,则不需要额外的功能。然后,您只需执行此操作(在循环内):

[~, idx] = ismember(X(i, :), mydata, 'rows')
if (idx > 0 && predictions(i) ~= clasL(idx))
    error = error+1;  
end 

第四,为了节省时间,您可以对(无循环)ismember中的所有行只运行一次,X然后以向量化方式查找错误数:

[~, idxs] = ismember(X, mydata, 'rows')
error = sum(predictions(idxs > 0) ~= clasL(idxs > 0))
于 2012-06-14T17:28:09.417 回答