Вот моя проблема, я пытаюсь создать числовые голограммы, используя python (3.7), и у меня возникает эта ошибка
Невозможно привести данные массива из dtype ('complex128') в dtype ('int64') согласно правилу 'safe'
Что я могу сделать, чтобы исправить это?
Вот мой код:
import numpy as np
import pylab as py
from PIL import Image
import matplotlib as plt
Jmax=256
q=np.zeros([Jmax,Jmax])
for l in range (Jmax):
for j in range(Jmax):
q[j,l]=1
for j in range (100,150):
for i in range (100,150):
q[i,j]=0
py.pcolormesh(q,cmap=plt.cm.gray, antialiased=True)
py.colorbar()
py.show()
l=.1*10**(-9) #wavelengh lambda
z1=40*10**(-9) #z1
#Wave equation tz1(x)
tz1=np.zeros([Jmax,Jmax],dtype=complex)
x=np.arange(-int(Jmax/2),int(Jmax/2),1)
y=np.arange(-int(Jmax/2),int(Jmax/2),1)
xx,yy=np.meshgrid(x,y)
tz1=np.exp( -1j*np.pi*(xx**2+yy**2) / z1*l )
py.pcolormesh(tz1,cmap=plt.cm.gray, antialiased=True)
py.show()
#fft = Fast Fourier Transform
k=np.fft.fftshift(np.fft.fft2(q))
T=np.fft.fftshift(np.fft.fft2(tz1) )
#convolution
phi=np.array([])
phi=np.fft.ifft2(k*T)
#Explanation of the fftshift : https://numpy.org/doc/1.18/reference/routines.fft.html?highlight=fft#module-numpy.fft
phi=np.fft.fftshift(phi)
phiconj=np.conj(phi)
#Intensity calculus
I=phi*phiconj
I=np.real(I)
#Here,cmap=plt.cm.gray, antialiased=True allow the pcolormesh to be in black and white.
py.pcolormesh(I,cmap=plt.cm.gray, antialiased=True)
py.colorbar()
py.show()
I1=Image.fromarray(I)
#Here I have to use PIl.Image.Image
I2=Image.Image.resize(self=I1,size=[256,256])
Image.Image.save(fp="Hologramme test 5.tif",self=I2) ```
Thank you in advance for your anwsers.
PS : I'm an ESL, so if you do not understand one of my sentence, plese tell me. I'll try to write it again so that it is easier to understand.