我编写了一个用于分类的Matlab脚本。当我执行此操作时,我的内存出现错误。
for i =1:size(Y)
if(predictions(i) ~= clasL(find(ismember(mydata,X(i)),'rows')))
error = error+1;
end
end
在上面的代码中,Y
和predictions
是维度为19928的向量。mydata
和X
是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)))
如何克服这个?请帮我。 感谢
答案 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))