2
我想實現一個函數,它接受numpy二維數組中的每一行,並返回某個特定計算的標量結果。我當前的代碼如下所示:numpy apply_along_axis vectorisation
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
函數?
我認爲apply_along_axis比簡單的行迭代慢。 – hpaulj
@hpaulj我測試了它,它的速度確實稍慢一點。這有什麼特別的理由嗎?如果沿軸應用通常比行迭代慢,那麼具有這樣的功能有什麼意義呢? – ymoiseev
方便。這是Python代碼,你可以閱讀。它不會編譯循環或函數的評估。它只是概括了循環,使得更易於表達多維度評估(即4d陣列中的其他3個)。它使用'np.ndindex'來生成循環索引。 – hpaulj