2017-09-20 1 views
0

ich einen Code haben, wo ich immer wieder wiederholt ausgestrahlt Arrays auf komplexe Weise zu, zum Beispiel:Shop mehrdimensionale numpy Array-Slice mit newaxis zum Objekt

a = b[np.newaxis, ..., :, np.newaxis] * c[..., np.newaxis, np.newaxis, :] 

Gibt es ein Objekt, an dem ich diese Aufschneiden Spezifikationen speichern ?

dh (aber offensichtlich das nicht funktioniert):

s1 = magic([np.newaxis, ..., :, np.newaxis]) 
s2 = magic([..., np.newaxis, np.newaxis, :]) 

Edit: vielleicht könnte dies mit numpy.broadcast_to getan werden, aber es ist unklar, wie genau gleichzeitig aber dafür sorgen, dass die richtigen Achsen ausgestrahlt ...

Antwort

5

Sie können den Index Tupel manuell konstruieren, aber NumPy umfasst ein helper dafür:

slice_tuple = np.s_[np.newaxis, ..., :, np.newaxis] 

Dann entspricht b[np.newaxis, ..., :, np.newaxis]b[slicetuple].


Als Referenz würde das Tupel Konstruktion manuell (np.newaxis, Ellipsis, slice(None), np.newaxis) sein. Auch np.newaxis is None, also (None, Ellipsis, slice(None), None) wäre gleichwertig.

class IndexHelper(object): 
    def __getitem__(self, arg): 
     return arg 

s_ = IndexHelper() 
+0

Danke:


np.s_ kann sich wie folgt neu implementiert werden! Ugh, ich dachte dumm, dass du keine Ellipsen für ein Tupel speichern kannst (aus welchem ​​Grund auch immer ...). Warum sollte der "Helfer" manuell bevorzugt werden? – DilithiumMatrix

+0

@DilithiumMatrix: Es ist einfach praktisch. – user2357112

Verwandte Themen