Existe-t-il un moyen simple d'obtenir une fonction pour renvoyer un np.array et une variable?
par exemple:
my_array = np.zeros(3)
my_variable = 0.
def my_function():
my_array = np.array([1.,2.,3.])
my_variable = 99.
return my_array,my_variable
my_function()
afin que les valeurs calculées dans la fonction puissent être utilisées plus tard dans le code? Ce qui précède ignore les valeurs calculées dans la fonction.
J'ai essayé de renvoyer un tuple {my_array, my_variable} mais j'ai reçu le message de type inshashable pour np.array.
DN
Ce n'est pas en ignorant les valeurs renvoyées, vous ne les affectez pas à des variables.
my_array, my_variable = my_function()
Votre fonction est correcte. Lorsque vous écrivez return my_array,my_variable
, votre fonction renvoie en fait un (my_array, my_variable)
de tuple.
Vous pouvez d’abord attribuer la valeur de retour de my_function()
à une variable, ce qui serait ce tuple que je décris:
result = my_function()
Ensuite, puisque vous savez combien d'éléments sont dans le tuple à l'avance, vous pouvez décompresser le tuple _ en deux valeurs distinctes:
result_array, result_variable = result
Ou vous pouvez le faire en une seule ligne:
result_array, result_variable = my_function()
Autres remarques relatives au retour des n-uplets et au déballage des tuples:
Je garde parfois les deux étapes séparées, si ma fonction peut renvoyer None
dans un échec non exceptionnel ou un cas vide:
result = my_function()
if result == None:
print 'No results'
return
a,b = result
# ...
Au lieu de décompresser, vous pouvez également accéder aux éléments spécifiés à partir du tuple, en utilisant leur index:
result = my_function()
result_array = result[0]
result_variable = result[1]
Si, pour une raison quelconque, vous avez un tuple à 1 élément:
return (my_variable,)
Vous pouvez le décompresser avec la même syntaxe à une virgule (légèrement maladroite):
my_variable, = my_function()
réponse facile
my_array, my_variable = my_function()
Après la définition de ma_fonction, utilisez ma_fonction = np.vectorize (ma_fonction).
Par exemple,
def jinc(x):
if x == 0.0:
return 1
return 2*j1(x)/x
jinc = np.vectorize(jinc)