高效的MATLAB代码,用于查找分类错误

时间:2012-06-14 16:57:18

标签: matlab

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

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

在上面的代码中,Ypredictions是维度为19928的向量。mydataX是19928 * 62061和12819 * 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)))

如何克服这个?请帮我。 感谢

1 个答案:

答案 0 :(得分: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))