2014-11-06 36 views
0

讓我們假設下面的例子:花式索引多維:超矩形的布爾矩陣?

import numpy as np 
x = np.random.random([100,200,300,400]) 
c1 = np.arange(0,100,17) 
c2 = np.arange(0,100,17) 
c3 = np.arange(0,100,17) 
c4 = np.arange(0,100,17) 
q = (((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4] 

是看着thisthis後最沒有效率的方式,這些都告訴我,這將是解開四維陣列爲一維,然後指數好主意,只在一個方面。那麼,沒有更好的方法來實現我想要實現的目標嗎?

回答

1

你可以使用np.ix_建立相應的指標:

>>> %timeit q = (((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4] 
1 loops, best of 3: 237 ms per loop 
>>> %timeit q = x[np.ix_(c1, c2, c3, c4)] 
100000 loops, best of 3: 19.3 µs per loop 

是幅度更快的訂單,但給出了相同的結果:

>>> np.allclose((((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4], x[np.ix_(c1, c2, c3, c4)]) 
True 
+0

太棒了!這正是我需要的! – varantir 2014-11-07 00:07:32