我正在尝试实现一个函数,该函数接受numpy 2d数组中的每一行并返回某些计算的标量结果。我的当前代码如下:
img = np.array([
[0, 5, 70, 0, 0, 0 ],
[10, 50, 4, 4, 2, 0 ],
[50, 10, 1, 42, 40, 1 ],
[10, 0, 0, 6, 85, 64],
[0, 0, 0, 1, 2, 90]]
)
def get_y(stride):
stride_vals = stride[stride > 0]
pix_thresh = stride_vals.max() - 1.5*stride_vals.std()
return np.argwhere(stride>pix_thresh).mean()
np.apply_along_axis(get_y, 0, img)
>> array([ 2. , 1. , 0. , 2. , 2.5, 3.5])
功能正常,但是性能并不好,因为在真实数据集中,每个框架大约有2k行和20-50列,每秒出现60次。
是否有一种方法可以加快处理速度,比如不使用np.apply_along_axis
函数?
np.ndindex
生成循环索引。 - hpaulj