将简单的IDL参数代码转换为python代码

时间:2019-06-11 06:43:16

标签: python idl-programming-language

我只想将IDL代码转换为python代码。对于任何IDL和Python专家来说,这都是一件容易的事。但是对于我来说,这是不可能的,如果有人帮助我翻译这段代码,那么我将非常感谢他/她。

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 :(得分:0)

这是对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标量会自动提高精度),使用“ **”代替“ ^”,然后使用Numpy的cos函数:

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)))

答案 1 :(得分:0)

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)))