Я совершенно не знаком с Python и пишу свои коды визуализации на Python с нуля (чтобы избежать использования дорогих проприетарных программ, таких как IDL). До сих пор я использовал IDL и gnuplot. Что я хочу сделать, так это:
Я пишу двумерные массивы в неформатированные файлы прямого доступа, используя fortran, которые я хочу иметь возможность читать в python. Точный тестовый код приведен ниже. Фактический код представляет собой огромный параллельный код, но выходные данные имеют почти такой же формат.
program binary_out
implicit none
integer :: i,j,t,rec_array
double precision, dimension(100,100) :: fn
double precision, parameter :: p=2*3.1415929
INQUIRE(IOLENGTH=rec_array) fn
open(unit=10,file='test',status='new',form='unformatted',access='direct',recl=rec_array)
fn=0
write(10,rec=1) fn
do t=1,3
do i=1,100
do j=1,100
fn(i,j)=sin(i*p*t/100)*cos(j*p*t/100)
enddo
enddo
write(10,rec=t+1) fn
enddo
close(10)
end program binary_out
Программа должна выдавать мне нули при t=1 и увеличивать количество «островков» при увеличении значения t. Но когда я читаю его, используя приведенный ниже код Python, я получаю только нули. Если я удаляю первый оператор записи нулей, я просто получаю первый временной срез независимо от того, какое значение «временного среза» я использую в коде Python.Код, который у меня есть на данный момент, таков:
#!/usr/bin/env python
import scipy
import glob
import numpy as np
import matplotlib.pyplot as plt
import os, sys
from pylab import *
def readslice(inputfilename,field,nx,ny,timeslice):
f=open(inputfilename,'r')
f.seek(timeslice*nx*ny)
field=np.fromfile(inputfilename,dtype='d',count=nx*ny)
field=np.reshape(field,(nx,ny))
return field
a=np.dtype('d')
a=readslice('test',a,100,100,2)
im=plt.imshow(a)
plt.show()
Я хочу, чтобы срез чтения по умолчанию мог читать запись с i-го места, если слайс времени равен i. Для этого я пытался использовать f.seek, но, похоже, он не работает. numpy.fromfile, кажется, начинает читать с самой первой записи. Как заставить numpy.fromfile читать из определенной точки файла?
Я все еще пытаюсь привыкнуть к стилю Python и копаться в документации. Любая помощь и указатели будут очень признательны.