通过索引对数组子集的标准差进行多次计算

时间:2018-07-12 06:39:54

标签: python performance numpy vectorization

说我有一个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循环,但是恐怕它会太慢。

谢谢

1 个答案:

答案 0 :(得分:1)

方法1::一种利用broadcasting-

的方法
np.std(my_array[ind_array[:,None] + np.r_[-5:5]],axis=1)

方法2::我们还可以利用基于np.lib.stride_tricks.as_stridedscikit-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)