说我有一个numpy数组:my_array = np.random.rand(100)
。
和另一个索引数组:ind_array = ([35, 58, 77])
在ind_array
中每个my_array
索引周围计算10个值的标准偏差的最快方法是什么? (即np.std(my_array[30:40]), np.std(my_array[53:63]), np.std(my_array[72:82])
)
显然可以使用for循环,但是恐怕它会太慢。
谢谢
答案 0 :(得分:1)
方法1::一种利用broadcasting
-
np.std(my_array[ind_array[:,None] + np.r_[-5:5]],axis=1)
方法2::我们还可以利用基于np.lib.stride_tricks.as_strided
的scikit-image's view_as_windows
获得更有效的解决方案-
from skimage.util.shape import view_as_windows
np.std(view_as_windows(my_array,(10))[ind_array-5],axis=1)