2011-06-15 3 views
0

У меня есть 2D NSArray строковых чисел, которые я бы хотел преобразовать в 2D-массив из двух пар для использования с функциями BLAS/LAPACK (через ракурс ускорения). Эта строка кода, похоже, работает, однако кажется невероятно неэффективной и в конечном итоге выходит из строя из-за ошибки malloc. Есть ли более эффективный способ преобразования этого 2D NSArray в массив C? Или удобный способ использования NSArrays с BLAS/LAPACK?Создание массива C из 2D 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

Есть ли причина 'i' начинается с 6 и не равна нулю? –

+0

Над данными есть 5 строк заголовка. – taylormade201

ответ

0

Здесь есть несколько вещей, которые касаются памяти.

1. componentsSeparatedByString: создает автореализованный массив. Поскольку вы выполняете цикл для каждого объекта внутри этой строки, вы создаете аналогичный массив несколько раз. Поскольку автореализованные объекты не будут выпущены до конца runloop, это может засорить память. Лучше сделать это один раз, выведя вызов метода из внутреннего цикла.

2.The значение 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

Смежные вопросы