花式索引多维:超矩形的布尔矩阵?

问题描述:

让我们假设下面的例子:花式索引多维:超矩形的布尔矩阵?

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后最没有效率的方式,这些都告诉我,这将是解开四维阵列为一维,然后指数好主意,只在一个方面。那么,没有更好的方法来实现我想要实现的目标吗?

你可以使用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