1

分類用のMatlabスクリプトを作成しました。これを実行すると、メモリ不足エラーが発生します。

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

上記のコードYpredictionsは、とは次元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)))

これを克服する方法は?私を助けてください。ありがとう

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 

第4に、時間を節約するために、 (ループなしismemberで)すべての行に対して1回だけ実行し、ベクトル化された方法でエラーの数を見つけることができます。X

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