1
是否有可能像花式索引一样使用接管多个轴?在多维数组上使用numpy.take?
多维数组相当大,所以我希望能够加快速度。
例如:
import numpy as np
x = np.random.rand(20,20,20,20)
m = np.where(x>0.5)
m = (m[0],m[1],m[2])
print x[m].shape
是否有可能像花式索引一样使用接管多个轴?在多维数组上使用numpy.take?
多维数组相当大,所以我希望能够加快速度。
例如:
import numpy as np
x = np.random.rand(20,20,20,20)
m = np.where(x>0.5)
m = (m[0],m[1],m[2])
print x[m].shape
您的代码:
m = np.where(x>0.5)
m = (m[0],m[1],m[2])
result = x[m]
可以写成通过重复来避免np.where:
m = np.sum(x>0.5,-1)
result = x.reshape(-1,x.shape[-1]).repeat(w.ravel(), 0)
这似乎快约4倍。然而,我不知道你是不是故意要求
m = np.any(x>0.5,-1)
result = x[m,:]
哪些不会创建重复(尽管这里仍然需要重新塑造)?
你可以扩展吗?你是否希望从你的代码示例中获得相同的结果,但是更快地使用'numpy.take'? 'x [x> 0.5]'不会给你想要的结果吗? – YXD 2012-08-08 16:30:24
是的,我希望能够取得更好的表现。 x [x> 0.5]与我只拍m的前三个轴不一样。 – 2012-08-08 18:18:33