_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
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
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]: