Вы можете использовать scipy.spatial.distance.cdist
с numpy.indices
:
from scipy.spatial.distance import cdist
import numpy as np
shape = (height, width)
v = cdist(np.indices(shape).reshape(2, -1).T, [[cr, cc]]).reshape(shape)
Это дает те же результаты, что и @ yatu's broadcasting solution во всех случаях, но, как ни странно, примерно в 3 раза медленнее для большого количества входных размеров. При этом он, вероятно, немного более эффективен по пространству, поскольку он выделяет только один массив выходного размера, а не два (второй - это сумма, введенная в квадрат root). Это не должно учитываться при любом обычном вводе, с которым вы сталкиваетесь, поэтому используйте решение для широковещательной передачи. Это просто для полноты картины.