让我们假设以下示例:
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后效率最低的方式,这些告诉我将4d数组解析为1d然后仅在一个维度中进行索引是个好主意。那么,有没有更好的方法来实现我想要实现的目标呢?
答案 0 :(得分: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