Python Numpy Complexe number "Невозможно преобразовать данные массива из dtype ('complex128') в dtype ('int64') в соответствии с правилом 'safe'" - PullRequest
0 голосов
/ 18 марта 2020

Вот моя проблема, я пытаюсь создать числовые голограммы, используя 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...