gy = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]])

def create_vector(image):
    """Creates a gradient vector for each pixel in the image
    Returns: vec_data: [mag, angle, avg_value]"""
dx = ndimage.convolve(gx, image)
dy = ndimage.convolve(gy, image)
vec_data_mag = np.abs(dx) + np.abs(dy)
vec_data_ang = np.abs(np.arctan2(dy, dx))
vec_data_avg = ndimage.convolve(np.ones(3, 3), image)
return np.dstack([vec_data_mag, vec_data_angl, vec_data_avg])
Векторизация нетривиального цикла for в numpy