>>> def dobule(x):
... print(x)
... return x * 2
...
>>> A = np.arange(6).reshape((3,2))
>>> A
array([[0, 1],
[2, 3],
[4, 5]])
Considérez comment appliquer votre propre fonction dans des lignes ou des colonnes de «A».
>>> np.array([double(a) for a in A])
[0 1]
[2 3]
[4 5]
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
Ceci peut être réalisé en utilisant la notation d'inclusion de liste comme ci-dessus, Je veux penser à un moyen d'éviter d'utiliser l'instruction for.
numpy.vectorize
https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html
>>> import numpy as np
>>> np.vectorize(double)(A)
0
0
1
2
3
4
5
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
(Pourquoi est-il imprimé 7 fois alors que le nombre d'éléments est de 6?)
Avec numpy.vectorize, la fonction sera appliquée élément par élément,
Il ne peut pas être appliqué sur une ligne ou une colonne.
numpy.apply_along_axis
https://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html
>>> np.apply_along_axis(double, 0, A)
[0 2 4]
[1 3 5]
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
>>> np.apply_along_axis(double, 1, A)
[0 1]
[2 3]
[4 5]
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
Vous pouvez utiliser numpy.apply_along_axis pour appliquer une fonction sur une base de ligne ou de colonne.
Recommended Posts