Что это означает, когда Условие означает в сценарии Python - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь перевести скрипт 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

Как я понимаю, в поле absolute_inverse должно быть одно значение, а немассив, так почему перед ним пара квадратных скобок?какое состояние в квадратных скобках пытается проверить?exact_inverse != exact_inverse условие, кажется, всегда false, или я что-то здесь упускаю.

Оригинальный сценарий можно найти здесь

1 Ответ

0 голосов
/ 20 января 2019

Прежде всего, (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!

А затем деление, умножение, сложение и т. Д. Массивов и чисел приводит к поэтапным операциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...