如何用numpy中的矢量化替换循环?

时间:2018-04-08 07:49:55

标签: numpy-ndarray

这是我的功能,我知道循环很慢 在numpy

中必须有更快/更好的方法
import numpy as np

def heat(u):
    my_u = np.empty_like(u)
    np.copyto(my_u, u)
    for row in range(1,u.shape[0]-1):
        for col in range(1,u.shape[1]-1):
            my_u[row, col] = (u[row-1][col] + u[row+1][col] 
            + u[row][col-1] + u[row][col+1])/4
    return my_u

print(heat(np.array([[100, 100, 100, 100, 100],
                    [100, 0, 0, 0, 100],
                    [100, 0, 0, 0, 100],
                    [100, 0, 0, 0, 100],
                    [100, 100, 100, 100, 100]])))

1 个答案:

答案 0 :(得分:0)

你确定你只想添加十字架的4个元素,而不是所有邻居吗?在SO上搜索' sum neighbors numpy '可以为你提供许多答案,无论你是如何掩盖它,都可以为你做任何交叉或完整的邻居。

如果你想要在速度方面稍微提高一点,那就放弃对阵列的双重查找,这会快30%左右。

my_u[row, col] = (u[row-1, col] + u[row+1, col] 
                 + u[row, col-1] + u[row, col+1])/4