Numpy: correlação cruzada normalizada (Trac # 1714)

Criado em 20 out. 2012  ·  12Comentários  ·  Fonte: numpy/numpy

_Tíquete original http://projects.scipy.org/numpy/ticket/1714 em 2011-01-15 pelo usuário trac bubla, atribuído a desconhecido._

Olá,
Eu fiz um patch que estende a função correlate para que possa calcular a correlação cruzada normalizada agora
Consulte [ http://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross -correlation o artigo da Wikipedia].

Eu adicionei documentação e doctest simples também, é claro.
O patch é contra o Git mestre mais recente

01 - Enhancement Patch numpy.core

Comentários muito úteis

Há uma resposta no SO que aponta aqui: https://stackoverflow.com/a/5639626/5392420

Também inclui o código mais relevante. Como o anexo acima não está mais disponível (pelo menos para mim), achei que seria útil ter isso como um início de implementação.

Também posso confirmar que - pelo menos no meu caso - funciona para "normalizar" os vetores de entrada antes de usar np.correlate assim e valores razoáveis ​​serão retornados dentro de um intervalo de [-1,1]:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

Todos 12 comentários

Anexo adicionado pelo usuário trac bubla em 15/01/2011: correlate.parch

_ @ rgommers escreveu em

Por se tratar de uma nova funcionalidade, você deve perguntar na lista de discussão se pode ser incluída.

Um teste de unidade é necessário, os doctests não são executados por padrão no conjunto de testes.

Isso pode ser útil.

Alguém pode verificar se isso está correto?

Estou me perguntando o que é certo em combinação com mode='full' .

Acontece que preciso desse recurso, mas não tenho certeza se ele está correto, exceto quando mode = 'válido' E ambas as matrizes têm o mesmo tamanho. Em outras palavras, acho que a normalização deve ser aplicada a cada janela.

alguma atualização sobre o assunto?
O patch foi testado para todos os modos correlatos?

@VlamV , como não tem nada aqui, não, acho que não. Se você tiver tempo para consertá-lo para os outros modos, acho que podemos adicioná-lo.

Alguma novidade sobre isso ?

não faria mais sentido dividir pelo desvio padrão da parte de a que é realmente usada (no caso de mode=same ou mode=full )

também não faria sentido usar as opções bias e ddof de numpy.corrcoef vez de simplesmente dividir por len(a)

Há uma resposta no SO que aponta aqui: https://stackoverflow.com/a/5639626/5392420

Também inclui o código mais relevante. Como o anexo acima não está mais disponível (pelo menos para mim), achei que seria útil ter isso como um início de implementação.

Também posso confirmar que - pelo menos no meu caso - funciona para "normalizar" os vetores de entrada antes de usar np.correlate assim e valores razoáveis ​​serão retornados dentro de um intervalo de [-1,1]:

a = (a - np.mean(a)) / (np.std(a) * len(a))
b = (b - np.mean(b)) / (np.std(b))
c = np.correlate(a, b, 'full')

A normalização pela parte do sinal a que é realmente usada (veja o comentário de @wilberth ) é implementada com métodos numpy na função correlate_template neste repositório: https://github.com/trichter/xcorr

Esta página foi útil?
0 / 5 - 0 avaliações