Ich möchte ein Array b
zu der Form übertragen, die es nehmen würde, wenn es in einer arithmetischen Operation mit einem anderen Array a
wäre. Wenn a.shape = (3,3)
und b
ein Skalar ist, möchte ich ein Array mit der Form (3,3)
erhalten, das mit dem Skalar gefüllt ist.Gibt es eine bessere Möglichkeit, Arrays zu übertragen?
Eine Möglichkeit, dies zu tun ist, wie folgt aus:
>>> import numpy as np
>>> a = np.arange(9).reshape((3,3))
>>> b = 1 + a*0
>>> b
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
Obwohl dies praktisch funktioniert, kann ich nicht helfen, aber das Gefühl, es ist ein bisschen seltsam aussieht, und würde nicht auf der Suche offensichtlich an jemand anderen bei der Code was ich versuchte zu tun.
Gibt es eine elegantere Möglichkeit, dies zu tun? Ich habe die Dokumentation für np.broadcast
angeschaut, aber es ist um Größenordnungen langsamer.
In [1]: a = np.arange(10000).reshape((100,100))
In [2]: %timeit 1 + a*0
10000 loops, best of 3: 31.9 us per loop
In [3]: %timeit bc = np.broadcast(a,1);np.fromiter((v for u, v in bc),float).reshape(bc.shape)
100 loops, best of 3: 5.2 ms per loop
In [4]: 5.2e-3/32e-6
Out[4]: 162.5
+1 für 'broadcast_arrays()'. – EOL
Perfekt! Genau das habe ich gesucht. Ich bin überrascht, dass ich es nicht gesehen habe; Es ist direkt neben "Broadcast" in den Dokumenten. – user545424
Wenn Sie neugierig sind, interessiert mich der Grund dafür, dass die Funktion 'scipy.ndimage.map_coordinates' die Eingabekoordinaten nicht automatisch ausstrahlt, also muss ich es manuell machen. – user545424