-1
votes

Produire un tableau d'une fonction Lambda, de la forme de la dimension et de DTYPE

Je dois créer une fonction qui prend une lambda, une forme de dimension et la DTYPE numpy, et produit un tableau. Je sais theres le fromfunction code> qui fera exactement cela, mais je ne peux pas l'utiliser. Je suppose qu'une façon de regarder c'est que j'ai besoin de codé un codage un fromfunction code>. Le problème que je vais avoir est que la fonction Lambda ne peut pas être transmise comme une fonction. J'ai essayé d'utiliser des boucles et d'utiliser des indices et je suis nouveau dans cette dernière idée, donc je ne le ferais peut-être pas correctement. Fondamentalement, j'ai besoin de créer la fonction. Les intrants sont donnés comme le résultat (attendu) dans le commentaire.

import numpy as np
def array_function(f, d, dtype=None):

    return x

print(array_function(lambda i,j: (i - j)**2, [4, 4]))

# Expected Result
#[[0. 1. 4. 9.]
# [1. 0. 1. 4.]
# [4. 1. 0. 1.]
# [9. 4. 1. 0.]]


0 commentaires

3 Réponses :


0
votes

La fonction Lambda ne peut pas être transmise

Une fonction Lambda est une fonction, qui est un objet de première classe dans Python. Ce n'est pas un problème pour le transmettre comme un argument à une autre fonction. Vous pouvez simplement créer un look ou une compréhension sur les deux dimensions et la fabrication et la matrice, puis remodeler: xxx

résultat: xxx < P> C'est un peu plus délicieux si vous voulez array_function pour prendre des tableaux de taille arbitraire. Une option serait de créer la matrice de la taille, puis d'énumérer sur tous les éléments pour appeler la fonction: xxx

Edition basée sur commentaire < / p>

Vous pouvez créer un itérateur avec starmap et produit de itTools. Je ne suis pas sûr qu'un itérateur vous achète beaucoup avec NUMPY puisque vous voulez généralement connaître la taille de la matrice lors de la création. Vous pouvez la transmettre une longueur, ce qui n'est pas nécessaire mais améliore les performances: xxx


2 commentaires

C'était éducatif. Vous pensez aussi que nous pouvons faire la même chose en utilisant itertools?


Hmm. Je ne sais pas ce que Itertools vous achète vraiment ici, mais bien sûr, vous pouvez le faire. Voir la modification.



0
votes

Que diriez-vous de créer un np.ufunc à partir de votre lambda et à l'aide de Réduire pour l'appliquer sur plusieurs dimensions? XXX

sortie: xxx


0 commentaires

0
votes

pour ce lambda code>, fromfunction code> fonctionne bien: xxx pré>

fromfunction code> génère une "grille" de Indices de la forme: P>

In [9]: f = np.frompyfunc(foo, 2,1)                                             
In [10]: f(np.arange(4)[:,None], np.arange(4))                                  
Out[10]: 
array([[0, 1, 4, 9],
       [1, 0, 1, 4],
       [4, 1, 0, 1],
       [9, 4, 1, 0]], dtype=object)


0 commentaires