2011-10-07 9 views
14

Sto usando un bel po 'di librerie fortran per fare alcuni calcoli matematici. Quindi tutti gli array in numpy devono essere Fortran-contigui.
Attualmente eseguo questo con numpy.asfortranarray().Come forzare l'ordinamento di matrice numpy in stile fortran?

Le mie domande sono:

  1. E 'questo un modo veloce di dire numpy che l'array deve essere conservato in stile FORTRAN o c'è uno più veloce?
  2. C'è la possibilità di impostare un flag numpy, in modo che ogni array creato sia in stile fortran?

risposta

11

Utilizzare l'argomento opzionale order = 'F' (predefinito 'C'), quando si generano oggetti numpy.array. Questo è il modo in cui lo faccio, probabilmente fa la stessa cosa che stai facendo. Riguardo al numero 2, non sono a conoscenza dell'impostazione dell'ordine predefinito, ma è abbastanza semplice includere solo l'argomento opzionale per l'ordine quando si generano gli array.

5

Riguardo alla domanda 2: si può essere preoccupati di mantenere l'ordine di Fortran dopo aver eseguito trasformazioni e operazioni di allineamento. Ho avuto un problema simile con endianness. Ho caricato una matrice raw big-endian dal file, ma quando ho applicato una trasformazione log, l'array risultante sarebbe little-endian. Ho avuto tutto il problema prima assegnando un secondo array big-endian, quindi di eseguire un registro sul posto:

b=np.zeros(a.shape,dtype=a.dtype) 
np.log10(1+100*a,b) 

Nel tuo caso si dovrebbe allocare b con l'ordinazione Fortran.