Question

J'ai un NSArray 2D des numéros de chaîne que je voudrais convertir en un tableau 2D C de doubles pour une utilisation avec des fonctions BLAS / LAPACK (à travers le cadre d'accélérer). Cette ligne de code semble fonctionner, semble cependant être incroyablement inefficace et éventuellement se bloque en raison d'une erreur de malloc. Y at-il un moyen plus efficace pour convertir cette 2D NSArray à un tableau C? Ou un moyen convienent d'utiliser NSArrays avec BLAS / LAPACK?

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 est un tableau qui contient des lignes d'un fichier qui sont analysées en nombres respectifs.

Était-ce utile?

La solution

Il y a peu de choses ici qui traitent de la mémoire.

1.componentsSeparatedByString: crée un tableau autoreleased. Puisque vous en boucle pour chaque objet dans cette chaîne, vous créez un tableau similaire à plusieurs reprises. Comme les objets autoreleased ne sont pas libérés avant la fin de la runloop cela pourrait obstruer la mémoire. Il est préférable de le faire une fois en faisant l'appel de méthode de la boucle intérieure.

valeur 2.Le i est le plus déroutant. Vous passez i comme l'indice gridDataC. Il devrait probablement être i - 6 si vous êtes à partir de 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];
    }  
} 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top