2017-06-22 2 views
0

J'ai enregistré une matrice en Python avec ndarray.tobytes(order='F').Lire dans Fortran une matrice enregistrée avec des tobytes en Python

f_mat = open('mat.dat', 'wb') 
f_mat.write(matrix.tobytes('F')) 
f_mat.close() 

Y at-il un moyen rapide de le lire en Fortran ou dois-je faire un cycle et déterminer l'ordre des éléments?

+0

Désolé mais dans Fortran (au moins les plus anciens), vous devez vraiment connaître la taille de l'enregistrement en octets et dans quelle séquence vous écrivez des données si vous utilisez un binaire. – 098799

+0

Pas nécessairement un record, mais vous devriez savoir ce que vous êtes en train de lire. Que signifient les octets. Si vous connaissez la taille et le type, il ne devrait s'agir que d'une instruction read. –

+0

Oui, c'est ce que je cherche. Je sais que ma matrice est une matrice de 3600 x 7200 avec des flottants en python. Cependant je ne sais pas comment dire à Fortran de lire une matrice à partir de binaires ... J'ai toujours utilisé l'instruction read pour une variable par temps, comme read (10, END = 999, ERR = 1000) realvalue – spec3

Répondre

2

Si vous connaissez la taille (n temps m) et le type du tableau et déclariez en conséquence:

!just an example 
real(c_double), allocatable :: mat(:,:) 
allocate(mat(n,m)) 

il devrait être juste

open(newunit = u, file='mat.dat', access='stream', form='unformatted', status='old', action='read') 
read(u) mat 
close(u) 

Les arguments open après access='stream' sont optionnel.