2017-09-20 50 views
0

我有一些代碼,我多次需要重複播放以複雜的方式排列,例如:存儲與newaxis多維numpy的數組切片對象

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

是否有對象,我可以存儲這些切片規格?

即(但顯然這不起作用):

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

編輯:也許這可能是與numpy.broadcast_to完成,但目前還不清楚,同時使究竟是如何確保正確的軸播完了...

回答

5

您可以手動構建索引記錄,但與NumPy包括helper吧:

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

然後b[np.newaxis, ..., :, np.newaxis]相當於b[slicetuple]


作爲參考,手動構建元組將是(np.newaxis, Ellipsis, slice(None), np.newaxis)。另外,np.newaxis is None,所以(None, Ellipsis, slice(None), None)將是等同的。

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

s_ = IndexHelper() 
+0

謝謝:


np.s_可以如下重新實現自己!呃,我愚蠢地認爲你不能將一個橢圓存儲到一個元組中(無論出於何種原因...)。爲什麼'助手'會被手動優先? – DilithiumMatrix

+0

@DithithiumMatrix:這很方便。 – user2357112