У меня есть матрица: a = np.random.randn(10,3)
, а локации: locs = [[6, 6, 0], [7, 0, 5], [0, 9, 2]]
. Мне нужно заменить значения в первом столбце a
в местах, описанных в первом столбце loc
, местозаполнителем (скажем, 0
или np.inf
). Точно так же местоположения, описанные во втором столбце loc
в a
, должны быть заменены местозаполнителем.
Я написал это как al oop в настоящее время:
for i in range(0, locs.shape[1]):
l = locs[:, i]
current = a[:, i]
current[l] = 0
a[:, i] = current
Можно ли заменить этот l oop на прямые numpy операции?
Пример ввода:
a =
[[ 1.43734578 0.09736638 -2.25746086]
[-0.76353825 0.29902121 -0.47547664]
[-0.6702289 -1.03620696 1.29729398]
[-0.01606927 0.03169479 0.32413694]
[-0.87992136 -0.13887237 0.76943651]
[-0.99176294 1.2174871 -0.04219437]
[-1.28379798 -2.05605769 0.30146702]
[-0.7249709 0.12472804 0.43728411]
[ 0.04843567 0.85251779 -0.12717516]
[ 0.13927597 2.06447447 -0.74675081]]
locs =
[[6 6 0]
[7 0 5]
[0 9 2]]
Ожидаемый результат:
output =
array([[ 0. , 0. , 0. ],
[-0.76353825, 0.29902121, -0.47547664],
[-0.6702289 , -1.03620696, 0. ],
[-0.01606927, 0.03169479, 0.32413694],
[-0.87992136, -0.13887237, 0.76943651],
[-0.99176294, 1.2174871 , 0. ],
[ 0. , 0. , 0.30146702],
[ 0. , 0.12472804, 0.43728411],
[ 0.04843567, 0.85251779, -0.12717516],
[ 0.13927597, 0. , -0.74675081]])