J'utilise Python pour générer des données initiales, sous la forme de tableaux 2D tels que 'X', puis en utilisant Fortran pour faire des calculs avec eux. Initialement, lorsque les tailles de tableau étaient d'environ 10 000 x 10 000, np.savetxt fonctionnait bien en termes de vitesse. Mais une fois que je commence à augmenter les dimensions des tableaux, la vitesse ralentit significativement pour le savetxt. J'ai donc essayé np.save et cela entraîne des économies beaucoup plus rapides, mais le fichier est enregistré au format .npy. Comment pourrais-je lire un tel fichier dans Fortran pour reconstruire le tableau original? D'après ce que j'ai lu, binaire se traduit généralement par la plus faible consommation d'espace et les vitesses les plus rapides.Lecture de tableaux à partir de fichiers .npy dans Fortran 90
Dans Fortran 90,
open(10,file='/home/X.npy')
read(10,*)X
Je reçois l'erreur suivante: Erreur d'exécution Fortran: nombre réel Bad au point 1 de l'entrée de la liste
modifier: En python je fais cela,
import numpy as np
x = np.linspace(-50,50,10)
y = np.linspace(-50,50,10)
X,Y = np.meshgrid(x,y)
np.save('X',X)
Puis en Fortran je fais cela,
program read_unformatted_binary_from_python
use iso_c_binding
implicit none
integer, parameter :: DPR = selected_real_kind(p=15)
character(len=*), parameter :: filename = 'X.npy'
integer, parameter :: N = 10
real(DPR), allocatable, dimension(:, :) :: X
allocate(X(N, N))
open(40, file=filename, status='old', access='stream', form='unformatted')
read(40) X
close(40)
write(*,*) X
end program read_unformatted_binary_from_python
La sortie commence par 1.8758506894003703E-309 + 171 1.1711999948023422E 5.2274167985502976E-037 8.4474009688929314E + 252 + 180 2.345660E 9.9215260506210473E + 247 + 233 2.1620996769994603E 7.5805790251297605E-096 3.4756671925988047E-152 6.5549091408576423E-260 -50,000000000000000 - 38.888888888888886 -27.777777777777779 et ainsi de suite
Cette erreur ne se produit pas lors de l'utilisation du format .bin, uniquement lors de l'utilisation de np.save, ce qui entraîne la présence de npy.
Fortran ne lira pas automagiquement et interprétera correctement les fichiers binaires arbitraires. Vous devrez soit trouver ou écrire une routine spécifiquement pour ce format. Il est relativement bien documenté et votre moteur de recherche préféré vous aidera à retrouver sa description. En passant, le message d'erreur suggère que les 4 premiers (ou éventuellement 8) octets du fichier ne peuvent pas être interprétés comme un Fortran 'real'. –
Encore pire, il a été ouvert pour la lecture formatée dans l'extrait de sorte qu'il essaie de lire un nombre en tant que texte. Cela ne peut pas fonctionner. Vous parlez de binaire, mais vous n'avez pas ouvert le fichier pour les E/S binaires (non formatées). –
Et toujours utiliser tag [tag: fortran] afin que plus de gens puissent voir votre question. Fortran 90 est juste une ancienne version - désormais obsolète -. Fortran 90 est inadéquat pour cette tâche, vous avez besoin d'E/S flux de Fortran 2003. –