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