花式索引多维:超矩形的布尔矩阵?
问题描述:
让我们假设下面的例子:花式索引多维:超矩形的布尔矩阵?
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]
是看着this和this后最没有效率的方式,这些都告诉我,这将是解开四维阵列为一维,然后指数好主意,只在一个方面。那么,没有更好的方法来实现我想要实现的目标吗?
答
你可以使用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
太棒了!这正是我需要的! – varantir 2014-11-07 00:07:32