J'ai un ensemble de tableaux 2D que j'ai pour calculer la corrélation 2D de. J'ai essayé beaucoup de choses différentes (même en le programmant dans Fortran), mais je pense que le moyen le plus rapide sera de le calculer en utilisant FFT.Calcul de la corrélation 2D enveloppée avec fftconvolve
Basé sur mes tests et this answer je peux utiliser scipy.signal.fftconvolve
et il fonctionne très bien si je suis en train de reproduire la sortie de scipy.signal.correlate2d
avec boundary='fill'
. Donc, fondamentalement, ce
scipy.signal.fftconvolve(a, a[::-1, ::-1], mode='same')
est égal à ce (à l'exception d'un léger décalage)
scipy.signal.correlate2d(a, a, boundary='fill', mode='same')
La chose est que les tableaux doivent être calculés en mode enveloppé, car ils sont des tableaux périodiques 2D (c'est-à-dire boundary='wrap'
). Donc, si je suis en train de reproduire la sortie de
scipy.signal.correlate2d(a, a, boundary='wrap', mode='same')
Je ne peux pas, ou du moins je ne vois pas comment le faire. (Et je veux utiliser la méthode FFT, car il est beaucoup plus rapide.)
Apparemment Scipy avait l'habitude d'avoir something like that qui aurait pu faire l'affaire, mais apparemment il a été laissé de côté et je ne peux pas le trouver, donc je pense Scipy pourrait avoir abandonné le support pour cela.
Quoi qu'il en soit, existe-t-il un moyen d'utiliser les routines FFT scipy
ou numpy
pour calculer cette corrélation des tableaux de périodes?
Comment ressemble votre 'a'? – kmario23
@ kmario23 Ce sont des données expérimentales privées, donc je ne peux pas vraiment partager ici. Mais ce sont des tableaux de 200x200 qui sont périodiques en x et y. – TomCho
Je n'ai pas une bonne réponse pour le moment, mais ce code "laissé derrière" que vous avez mentionné peut être trouvé [ici] (https://github.com/scipy/scipy/blob/maintenance/0.7.x/scipy/stsci/convolve/lib/Convolv.py # L144) – jakevdp