I am completely new to Python and I write my Python rendering codes from scratch (to avoid using expensive proprietary programs like IDL). So far I have used IDL and gnuplot. What I want to do is the following:
I am writing two-dimensional arrays to files without formatted direct access using fortran, which I want to read in python. The exact test code is given below. The actual code is a huge parallel code, but the output is almost in the same format.
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
The program should give me zeros at t = 1 and increase the number of "islands" to increase the value of t. But when I read it using the python code below, I just get zeros. If I delete the first operator to write zeros, I just get the first slice, no matter what the "timeslice" value I use in python code. The code I have so far is:
#!/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 want def readslice to be able to read the record in i-th place if timelice is i. I tried using f.seek for this, but it does not seem to work. It seems that numpy.fromfile starts reading from the very first record. How to make numpy.fromfile to read from a specific point in a file?
I'm still trying to get used to the Python style and delving into the documentation. Any help and pointers would be greatly appreciated.