2011-06-15 14 views
0

BLAS/LAPACK関数(アクセラレーションフレームワークを使用)で使用するための2D C配列の二次元配列に変換する文字列番号の2D NSArrayがあります。 このコード行は動作すると思われますが、mallocエラーのために信じられないほど非効率的で最終的にクラッシュするようです。この2D NSArrayをC配列に変換する効率的な方法はありますか?またはBLAS/LAPACKでNSArraysを使用するconvienentな方法?2D NSArrayからC配列を作成する

double gridDataC[[nrows intValue]+1][[ncol intValue]+1]; 

for(i=6;i<[fileLines count]-1;i++){ 
    for(j=0;j<[ncol intValue]-1;j++){ 
     gridDataC[i][j]=[[[[fileLines objectAtIndex:i] componentsSeparatedByString:@" "] objectAtIndex:j] doubleValue]; 
    } 
} 

fileLinesは、それぞれの数字に解析されるファイルの行を含む配列です。

+0

「i」は6から始まりゼロではない理由はありますか? –

+0

データの上に5つの見出し行があります。 – taylormade201

答えて

0

ここでは、メモリを扱うものはほとんどありません。

1. componentsSeparatedByString:は、自動リリース配列を作成します。その文字列内のすべてのオブジェクトについてループしているので、同様の配列を複数回作成しています。自動リリースされたオブジェクトは、実行ループが終了するまで解放されないため、メモリを詰まらせる可能性があります。内部ループからメソッド呼び出しを呼び出すことで、これを一度行うほうがよいでしょう。

2. iの値は、最も混乱します。 gridDataCのインデックスとしてiを渡します。 i = 6から開始する場合は、おそらくi - 6になるはずです。

double gridDataC[[nrows intValue] + 1][[ncol intValue] + 1]; 

for(i = 6; i < [fileLines count] - 1; i++){ 
    NSArray * components = [[fileLines objectAtIndex:i] componentsSeparatedByString:@" "]; 
    for(j = 0; j < [ncol intValue] - 1; j++){ 
     gridDataC[i - 6][j] = [[components objectAtIndex:j] doubleValue]; 
    } 
} 
+0

それはたくさんの意味があります!提案してくれてありがとう、私は彼らにショットを与えるだろう。 – taylormade201

関連する問題