>>> def dobule(x):
... print(x)
... return x * 2
...
>>> A = np.arange(6).reshape((3,2))
>>> A
array([[0, 1],
[2, 3],
[4, 5]])
Überlegen Sie, wie Sie Ihre eigene Funktion in Einheiten von Zeilen oder Spalten von "A" anwenden können.
>>> np.array([double(a) for a in A])
[0 1]
[2 3]
[4 5]
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
Dies kann erreicht werden, indem die Listeneinschlussnotation wie oben verwendet wird. Ich möchte einen Weg finden, um die Verwendung der for-Anweisung zu vermeiden.
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]])
(Warum wird es 7 Mal gedruckt, obwohl die Anzahl der Elemente 6 beträgt?)
Mit numpy.vectorize
wird die Funktion Element für Element angewendet,
Es kann nicht zeilen- oder spaltenbasiert angewendet werden.
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]])
Sie können numpy.apply_along_axis
verwenden, um eine Funktion zeilen- oder spaltenbasiert anzuwenden.
Recommended Posts