Преобразование простого кода аргумента IDL в код Python - PullRequest
0 голосов
/ 11 июня 2019

Просто я хочу перевести код IDL в код Python.Это простая задача для любого IDL и Python Expert.Но это невозможно для меня, если кто-нибудь поможет мне перевести этот код, то я буду ему благодарен.

RelA = ABS((image1 ) - (image2))
index = where(RelA gt 180.D)
RelA[index] = 360.D- RelA[index]
index = where(RelA le 180.)
RelA[index] = 180.D- RelA[index]
CosRe = cos(RelA * !pi / 180.D)

Ответы [ 2 ]

0 голосов
/ 11 июня 2019
Pz=image1
Po=image2
Agl=image3
delta=0.0139
D1 = (0.00864D + (0.0000065D )) * (0.86D)^(-(3.916 + (0.074 * 0.86D)+ (0.05/0.86D)))
D2 = 0.008569D * ((0.8585D)^(-4))*(1.D + (0.0113D *(0.8585D)^(-2)) + (0.00013D * (0.8585D)^(-4)))
D1 = (Pz/Po) * (0.00864D + (0.0000065D * z)) * (0.55D)^(-(3.916 + (0.074 * 0.55)+ (0.05/0.55)))

Pr1 = (3.D/16.D*!dPi)* (2/(2+delta))* ((1+delta)+((1+delta)*(cos(Agl) * cos(Agl))))
Pr2 =  (3.D/16.D*!Pi) * (1 + (cos(Agl) * cos(Agl)))
0 голосов
/ 11 июня 2019

Это простое преобразование в NumPy:

#RelA = ABS((image1 ) - (image2))
RelA = np.abs(image1 - image2)

#index = where(RelA gt 180.D)
index = np.where(RelA > 180.0)

#RelA[index] = 360.D- RelA[index]
RelA[index] = 360.0 - RelA[index]

#index = where(RelA le 180.)
index = np.where(RelA <= 180.0)

#RelA[index] = 180.D- RelA[index]
RelA[index] = 180.0 - RelA[index]

#CosRe = cos(RelA * !pi / 180.D)
CosRe = np.cos(np.radians(RelA))

Чтобы перевести ваш второй фрагмент кода, просто удалите спецификаторы "D" (скаляры Python автоматически повышают точность), используйте "**" вместо "^" и используйте функцию cos Numpy:

D1 = (0.00864 + (0.0000065)) * (0.86D)**(-(3.916 + (0.074 * 0.86)+ (0.05/0.86D)))
D2 = 0.008569 * ((0.8585)**(-4))*(1. + (0.0113 *(0.8585)**(-2)) + (0.00013 * (0.8585D)^(-4)))
D1 = (Pz/Po) * (0.00864 + (0.0000065 * z)) * (0.55)**(-(3.916 + (0.074 * 0.55)+ (0.05/0.55)))
Pr1 = (3./16.*np.pi)* (2/(2+delta))* ((1+delta)+((1+delta)*(np.cos(Agl) * np.cos(Agl))))
Pr2 =  (3./16.*np.pi) * (1 + (np.cos(Agl) * np.cos(Agl)))
...