Das hängt davon ab, ob die "komplizierte Mathematik" vektorisiert werden kann und ob es eine Zeile oder mehrere ist. Wenn es nicht vektorisiert und mehrere Linien nimmt werden kann, was die kompliziertere Lösung ist, können Sie etwas tun:
b = np.zeros_like(a)
for i, ai in enumerate(a):
b[i] = some_complicated_math(ai)
c = a*b
In diesem Beispiel i
ist der aktuelle Index von a
und ai
ist der Wert bei dieser Index (das Äquivalent von a[i]
). enumerate
gibt Ihnen einen Wert und seinen (1D) Index. Multiplikation in numpy Arrays ist automatisch elementweise.
Wenn die „komplizierte Mathematik“ kann nicht vektorisiert werden, sondern kann in einer Zeile durchgeführt werden, können Sie etwas tun:
b = [some_complicated_math(ai) for ai in a]
c = a*b
In diesem Fall b
ist eine Liste (kein numpy Array) , aber python ist schlau genug, b
in ein numpliges Array hinter den Kulissen zu konvertieren, da es mit dem numpy Array a
multipliziert wird. Sie können b
in ein numpliges Array mit np.array(b)
konvertieren, wenn Sie es später benötigen.
Das einfachste Szenario ist, wenn die "komplizierte Mathematik" vektorisiert werden kann. Dann können Sie einfach tun:
b = some_complicated_math(a)
c = a*b
Wenn aus welchem Grund auch immer, müssen Sie b
und c
in der Schleife setzen (der einzige Grund, warum ich wäre, wenn b
Referenzen einfiel c
irgendwie), dann können Sie tun dies:
b = np.zeros_like(a)
c = np.zeros_like(a)
for i, ai in enumerate(a):
b[i] = some_complicated_math(ai)
c[i] = a[i]*b[i]
suchen Sie einen [Kreuzprodukt] (https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.cross.html) oder ein [dot Produkt] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html)? –
... oder ein [elementweises Produkt] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html)? –
@FredLarson judjing durch den Pseudocode geliefert, wäre es elementweise ('c (i) = a (i) * b (i)'). – Uriel