Как я могу использовать numpy.correlate для автокорреляции?

Просто удалите; из кода

        'LoginRadiusGoogleLogin' : function (client) {
            client
                .url('https://lr-candidate-demo1.hub.loginradius.com/auth.aspx')
                .maximizeWindow()
                .waitForElementVisible('span[title=Sign up with Google]', 10000)
                .click('span[title=Sign up with Google]')
                .windowHandles(function(result) {
                console.log(result.value);
                var newWindow=result.value[1];
                this.switchWindow(+newWindow);
                }
                .end();
        }
    };```
95
задан ascripter 21 February 2019 в 18:20
поделиться

1 ответ

Отвечать на Ваш первый вопрос, numpy.correlate(a, v, mode) выполняет свертку a с реверсом v и предоставление результатов отсекается указанным режимом. Определение свертки, C (t) =â ˆ‘-â ˆž <я <â ˆž aivt+i, где-â ˆž <t <â ˆž, допускает результаты-â ˆž к â ˆž, но Вы, очевидно, не можете сохранить бесконечно долгий массив. Таким образом, это должно быть отсечено, и это - то, где режим входит. Существует 3 различных режима: полный, то же, и допустимый:

  • "полный" режим возвращает результаты для каждого t где оба a и v имейте некоторое перекрытие.
  • "тот же" режим возвращает результат с той же длиной как самый короткий вектор (a или v).
  • "допустимый" режим возвращает результаты только когда a и v полностью перекройте друг друга. Документация для numpy.convolve предоставляет больше подробную информацию на режимах.

Для Вашего второго вопроса я думаю numpy.correlate дает Вам автокорреляцию, она просто дает Вам немного больше также. Автокорреляция используется, чтобы найти, как подобный сигнал, или функционируют, к себе в определенной разнице во времени. В разнице во времени 0, автокорреляция должна быть самой высокой, потому что сигнал идентичен себе, таким образом, Вы ожидали, что первый элемент в массиве результата автокорреляции будет самым большим. Однако корреляция не запускается в разнице во времени 0. Это запускается в отрицательной разнице во времени, закрывается к 0 и затем идет положительное. Таким образом, Вы ожидали:

автокорреляция (a) = â ˆ‘-â ˆž <я <â ˆž aivt+i, где 0 <= t <â ˆž

Но то, что Вы получили, было:

автокорреляция (a) = â ˆ‘-â ˆž <я <â ˆž aivt+i, где-â ˆž <t <â ˆž

То, что необходимо сделать, является взятием последняя половина результата корреляции, и это должно быть автокорреляцией, которую Вы ищете. Простой Python функционирует, чтобы сделать, который был бы:

def autocorr(x):
    result = numpy.correlate(x, x, mode='full')
    return result[result.size/2:]

Вам, конечно, будет нужна проверка ошибок для проверки этого x на самом деле массив 1-d. Кроме того, это объяснение, вероятно, не наиболее математически строго. Я бросал вокруг бесконечностей, потому что определение свертки использует их, но это не обязательно запрашивает автокорреляцию. Так, теоретическая часть этого объяснения может быть немного wonky, но надо надеяться практические результаты полезны. Они страницы на автокорреляции довольно полезен, и может дать Вам намного лучший теоретический фон, если Вы не возражаете пробираться через нотацию и тяжелые понятия.

102
ответ дан bkanuka 24 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: