2D NSARRAYからCアレイを作成します
-
28-10-2019 - |
質問
文字列番号の2D NSARRAYがあり、BLA/LAPACK関数で使用するために2D Cアレイのダブルに変換したい(Accelerate Frameworkを介して)。このコードの行は機能しているようですが、非常に非効率的であるように思われ、最終的にはmallocエラーのためにクラッシュします。この2D NSARRAYをCアレイに変換するためのより効率的な方法はありますか?それとも、Blas/LapackでNSARRAYを使用する説得力のある方法は?
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は、それぞれの数値に解析されたファイルの行を含む配列です。
解決
ここには、メモリを扱うものはほとんどありません。
1.componentsSeparatedByString:
自動化されたアレイを作成します。その文字列内のすべてのオブジェクトに対してループしているため、同様の配列を複数回作成しています。オートリリースされたオブジェクトは、ルンループの終わりまで放出されないため、メモリを詰まらせる可能性があります。インナーループからメソッドコールを出すことで、これを1回行う方が良いでしょう。
2.の値 i
最も混乱しています。あなたは合格します i
のインデックスとして gridDataC
. 。おそらくそうあるべきです 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];
}
}
所属していません StackOverflow