Domanda

Ho un NSARRAY 2D di numeri di stringa che vorrei convertire in un array 2 C di doppio da utilizzare con funzioni BLAS/LAPACK (attraverso il framework Accelerate). Questa riga di codice sembra funzionare, tuttavia sembra essere incredibilmente inefficiente e alla fine si blocca a causa di un errore di malloc. Esiste un modo più efficiente per convertire questo 2D Nsarray in un array C? O un modo conveniente di usare nSarrays con 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];
    }  
} 

Fileline è un array che contiene righe di un file che vengono analizzati nei rispettivi numeri.

È stato utile?

Soluzione

Ci sono poche cose qui che si occupano della memoria.

1.componentsSeparatedByString: Crea un array autolevato. Dal momento che stai ciclando per ogni oggetto all'interno di quella stringa, stai creando un array simile più volte. Poiché gli oggetti autolerizzati non vengono rilasciati fino alla fine di Runloop, questo potrebbe intasare la memoria. È meglio farlo una volta portando la chiamata del metodo dal ciclo interiore.

2. Il valore di i è il più confuso. Tu passi i come indice per gridDataC. Probabilmente dovrebbe esserlo i - 6 Se inizi da 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];
    }  
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top