在python脚本中,where条件意味着什么

在python脚本中,where条件意味着什么,python,numpy,conditional-statements,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/

我正在尝试将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
据我所知,精确逆应该是一个单一的值,而不是一个数组,那么为什么在它前面有一对方括号呢?方括号中的条件是什么<代码>精确逆运算!=完全相反的条件似乎总是
false
,或者我在这里遗漏了什么

可以找到原始脚本

首先,
(numpy.nan!=numpy.nan)是真的
,因此,
完全相反!=精确逆运算
并不总是错误的

接下来,考虑一下:

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

然后,数组和数字的除法、乘法、加法等会产生元素操作。

而不是
np。其中(精确逆)
也可以使用
np.isnan(精确逆)
。请注意,您的问题似乎太广泛了。如果我理解正确,你会问(1)NumPy操作符和函数是如何工作的(至少是隐式的)(2)尖括号的意思(如果你对谷歌的“NumPy索引”感兴趣)和(3)精确逆是什么!=这里的“精确逆”是指。在StackOverflow上,通常每个问题只问一个问题,这样不仅对你有用,而且对未来的读者也有用。我鼓励你问一个问题,你说你想把这个脚本翻译成Java,但这可能是不可能的。NumPy阵列是n维的,操作是按元素进行的(但也可以广播)。Java中可能没有通用的解决方案。