zu werfen Wenn ich eine Funktion schreiben, die ndarray
oder scalar
EingängeEffiziente Weise Skalare zu numpy Arrays
def foo(a):
# does something to `a`
#
# a: `x` dimensional array or scalar
# . . .
cast(a, x)
# deal with `a` as if it is an `x`-d array after this
Gibt es eine effeicint Weise yo, dass cast
Funktion schreiben akzeptiert? Im Grunde, was ich würde wollen, ist eine Funktion, die werfen würde:
a
, einscalar
zundarray
mit Form((1,)*x)
b
, einndarray
mity<x
ausdrücklich((1,) * (y-x) + b.shape)
(gleich wie Rundfunk)- gestalten dimmt
c
, einndarray
mitx
Dims ist unberührt d
, einndarray
wit hy>x
dimmt wirft einen Fehler- tut es in-place (zumindest, wenn sie mit einem Array ausgehend), Doppelspeicher zu verhindern
es scheint, wie diese Funktionalität so oft in integrierten Funktionen wiederholt wird, dass Es sollte eine Abkürzung dafür geben, aber ich finde es nicht.
Ich kann a_ = np.array(a, ndmin = x, copy = False)
und dann assert len(a_.shape) == x)
tun, aber das macht immer noch eine Kopie von Arrays. (d. h. a_.base is a
ist False
). Gibt es einen Weg dazu?
'np.array' nimmt einen' copy' Parameter. Wir haben gerade diesen Parameter in "Astype" untersucht. Funktionen wie 'atleast_3d' verwenden' asarray' gefolgt von 'newaxis'. 'np.expand_dims' könnte auch Ideen geben. Die meisten dieser Aktionen machen eine Ansicht, keine Kopie. Nur 'x.shape = ...' ändert die Form 'in-place'. – hpaulj
'np.asarray' ist' np.array' mit 'copy = False'. – hpaulj
@hpaulj 'np.asarray' nimmt jedoch keinen' ndmin' Parameter. Und irgendwie 'np.array (a, ndmin = x, copy = False)' macht immer noch eine Kopie eines Arrays für mich –