2011-10-07 12 views
14

Używam sporo fortranowych bibliotek do wykonywania obliczeń matematycznych. Więc wszystkie tablice w numpy muszą być Fortran-sąsiadujące.
Obecnie osiągam to z numpy.asfortranarray().Jak wymusić kolejność numpy w stylu fortran?

Moje pytania są następujące:

  1. Jest to szybki sposób mówienia numpy, że tablica powinna być przechowywana w stylu Fortran czy istnieje szybszy?
  2. Czy istnieje możliwość ustawienia flagi numpy, aby każda utworzona tablica była w stylu fortranowym?

Odpowiedz

11

Użycie opcjonalnej kolejności argumentów = 'F' (domyślnie "C") podczas generowania obiektów numpy.array. Tak to robię, prawdopodobnie robi to samo, co robisz. O numerze 2, nie jestem świadomy ustawienia domyślnej kolejności, ale łatwo jest dołączyć argument opcjonalny do zamówienia podczas generowania tablic.

5

Odnośnie do pytania 2: możesz być zaniepokojony zachowaniem zamawiania Fortran po przeprowadzeniu transformacji macierzy i operacji. Miałem podobny problem z endianizmem. Załadowałem dużą tablicę raw-endian z pliku, ale kiedy zastosowałem transformację logu, wynikowa tablica będzie mało-endianowa. Mam wokół problemu najpierw przydzielania drugi big-endian tablicę, a następnie wykonując dziennik w miejscu:

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

W twoim przypadku będzie można przydzielić b z Fortran zamawiania.