条件在python脚本中的含义是什么

时间:2019-01-20 13:52:33

标签: python numpy conditional-statements

我正在尝试将python脚本转换为java。由于我对python不太熟悉,因此我无法理解此脚本中的条件。这是原始脚本:

import numpy as np
def inverse_generalized_anscombe(x, mu, sigma, gain=1.0):        

    test = np.maximum(x, 1.0)
    exact_inverse = ( np.power(test/2.0, 2.0) +
                      1.0/4.0 * np.sqrt(3.0/2.0)*np.power(test, -1.0) -
                      11.0/8.0 * np.power(test, -2.0) +
                      5.0/8.0 * np.sqrt(3.0/2.0) * np.power(test, -3.0) -
                      1.0/8.0 - np.power(sigma, 2) )
    exact_inverse = np.maximum(0.0, exact_inverse)
    exact_inverse *= gain
    exact_inverse += mu
    exact_inverse[np.where(exact_inverse != exact_inverse)] = 0.0
    return exact_inverse

我不理解的行是这一行:

exact_inverse[np.where(exact_inverse != exact_inverse)] = 0.0

据我了解,exact_inverse应该是单个值,而不是数组,那么为什么在它前面有一对方括号?方括号试图检查的情况是什么? exact_inverse != exact_inverse的情况似乎总是false,或者我在这里错过了什么。

可以找到原始脚本here

1 个答案:

答案 0 :(得分:2)

首先(numpy.nan != numpy.nan) is True,因此exact_inverse != exact_inverse并非总是错误。

接下来,考虑一下:

>>> exact_inverse = 5
>>> exact_inverse += numpy.array([1,2]) # this may be 'mu', the same for 'gain'
>>> exact_inverse
array([6, 7]) # no longer an integer

此外,如果x是一个数组,则:

>>> x = numpy.array([1,2,3])
>>> numpy.maximum(x, 1.0)
array([ 1.,  2.,  3.]) # that's an array!

然后,对数组和数字进行除法,乘法,加法等操作将导致按元素进行运算。