Одним из способов будет использование masked array
для нахождения минимального значения вдоль столбцов, маскирующих те, которые <=0
. И замените 0s
в массиве соответствующим минимумом, используя np.where
:
min_gt0 = np.ma.array(r, mask=r<=0).min(0)
np.where(r == 0, min_gt0, r)
Вот пример:
r = np.random.randint(0,5,(5,5))
print(r)
array([[2, 1, 3, 0, 4],
[0, 4, 4, 2, 2],
[4, 0, 0, 0, 1],
[1, 2, 2, 2, 2],
[2, 0, 4, 4, 2]])
min_gt0 = np.ma.array(r, mask=r<=0).min(0)
np.where(r == 0, min_gt0, r)
array([[2, 1, 3, 2, 4],
[1, 4, 4, 2, 2],
[4, 1, 2, 2, 1],
[1, 2, 2, 2, 2],
[2, 1, 4, 4, 2]])