0
votes

Numpy: Comment calculer l'interpolation linéaire par morceaux sur plusieurs axes

Compte tenu de la ndarray t - xxx

Ce jeu linéaire par morceau linéaire pour les points t [:, 0, 0] peut Évalué pour [0, 0,66666667, 1.33333333, 2.] comme suit en utilisant numpy.interp - xxx

Comment tous les interpolants peuvent-ils être calculés efficacement et renvoyés ensemble pour tous Valeurs de FP - xxx


0 commentaires

3 Réponses :


0
votes

Vous pouvez essayer sciped.interpoler.interp1d : xxx


0 commentaires

1
votes

Comme l'interpolation est 1D avec la modification des valeurs y , il doit être exécuté pour chaque tranche de 1D de t. Il est probablement plus rapide de boucler explicitement, mais néatre à la boucle à l'aide de np.apply_along_axis xxx

avec des boucles explicites xxx

sur ma machine La deuxième option fonctionne dans la moitié du temps.

EDIT à utiliser np.nditer

Comme le résultat et le paramètre a des formes différentes que je semble Donner à créer deux objets NP.NDiter un pour le paramètre et un pour le résultat. Ceci est ma première tentative d'utilisation nditer pour que cela puisse être sur compliqué. xxx

Il est légèrement plus lent que les boucles explicites et moins faciles à suivez que l'une des autres solutions.


4 commentaires

@Tis Chris Je remarque que vous utilisez des techniques de bouclage standard Python pour itérer sur les deuxième et troisième axes de t . Y a-t-il des avantages à utiliser numpy.nditer ?


@ user2309803 J'ai passé un peu de temps à expérimenter avec nditer . Je l'ai évité à cause de la longueur de la documentation :-) La solution semble maladroite que l'une des autres, mais pour que les données ici ont été très légèrement plus lentes que sa boucle explicite. Je ne suis pas sûr qu'il y ait des gains de nditer dans ce contexte. J'ai peut-être manqué quelque chose dans ma mise en œuvre.


@Tis Chris: J'ai réussi à ré-implémenter votre solution à l'aide de NP.NDiter (T [0], Flags = ['Multi_index']) Mais il était de 10% plus lent.


@ user2309803: Pouvez-vous poster comme solution. Je n'ai jamais vraiment essayé de comprendre nditer ou trouvé un problème que je pensais que cela aiderait. Ce serait intéressant de voir.



1
votes

Comme demandé par @tis chris, voici une solution utilisant np.nditer avec le drapeau multi_index mais je préfère le explicite pour pour Méthode des boucles ci-dessus car il est 10% plus rapide xxx


1 commentaires

Merci. J'ai une idée plus claire comment cela fonctionne maintenant. J'ai du code qui effectue l'interpolation le long de tout axe choisi de la matrice source. Je me demande si NDiter peut accélérer ou le rendre plus clair,