質問

文字列番号の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];
    }  
} 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top