0

文字列番号の 2D NSArray を持っており、BLAS/LAPACK 関数で使用するために double の 2D C 配列に変換したいと考えています (加速フレームワークを介して)。このコード行は機能しているように見えますが、信じられないほど効率が悪いようで、最終的に malloc エラーが原因でクラッシュします。この 2D NSArray を C 配列に変換するより効率的な方法はありますか? または、BLAS/LAPACK で NSArrays を使用する便利な方法はありますか?

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 は、それぞれの数値に解析されるファイルの行を含む配列です。

4

1 に答える 1

0

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

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];
    }  
} 
于 2011-06-15T01:34:01.700 に答える