2011-06-15 116 views
0

我有一個2D NSArray的字符串數字,我想將其轉換爲2D C數組,用於BLAS/LAPACK函數(通過加速框架)。 這行代碼似乎工作,但似乎是令人難以置信的效率低下,並最終崩潰,由於malloc錯誤。有沒有更有效的方法來將此2D NSArray轉換爲C數組?或者將NSArrays與BLAS/LAPACK結合使用?從2D創建一個C數組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是一個數組,其中包含解析爲相應數字的文件行。

+0

有沒有理由'我'從6開始而不是零? – 2011-06-15 00:33:32

+0

數據上方有5個標題行。 – taylormade201 2011-06-15 01:18:48

回答

0

這裏處理內存的東西很少。

1. componentsSeparatedByString:創建一個自動釋放數組。由於您正在循環該字符串中的每個對象,因此您正在多次創建相似的數組。由於直到runloop結束才釋放自動釋放的對象,因此可能會堵塞內存。通過將方法調用從內部循環中調出一次會更好。

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]; 
    } 
} 
+0

這很有道理!感謝您的建議,我會給他們一個機會。 – taylormade201 2011-06-15 01:51:50