Я работаю с 3-мерными массивами (для целей этого примера вы можете представить, что они представляют значения RGB в координатах X, Y экрана).
>>> import numpy as np
>>> a = np.floor(10 * np.random.random((2, 2, 3)))
>>> a
array([[[ 7., 3., 1.],
[ 9., 6., 9.]],
[[ 4., 6., 8.],
[ 8., 1., 1.]]])
Что бы я хотелсделать, это установить произвольное значение G-канала для тех пикселей, чей G-канал уже ниже 5 .Мне удается выделить нужный мне пиксель:
>>> a[np.where(a[:, :, 1] < 5)]
array([[ 7., 3., 1.],
[ 8., 1., 1.]])
, но я пытаюсь понять, как назначить новое значение только для канала G.Я попытался:
>>> a[np.where(a[:, :, 1] < 5)][1] = 9
>>> a
array([[[ 7., 3., 1.],
[ 9., 6., 9.]],
[[ 4., 6., 8.],
[ 8., 1., 1.]]])
... но, похоже, не дает никакого эффекта.Я также попытался:
>>> a[np.where(a[:, :, 1] < 5), 1] = 9
>>> a
array([[[ 7., 3., 1.],
[ 9., 9., 9.]],
[[ 4., 6., 8.],
[ 9., 9., 9.]]])
... (не понимая, что происходит).Наконец я попытался:
>>> a[np.where(a[:, :, 1] < 5)][:, 1] = 9
>>> a
array([[[ 7., 3., 1.],
[ 9., 6., 9.]],
[[ 4., 6., 8.],
[ 8., 1., 1.]]])
Я подозреваю, что мне не хватает чего-то фундаментального о том, как работает NumPy (это первый раз, когда я использую библиотеку).Буду признателен за помощь в достижении того, чего я хочу, а также за объяснение того, что произошло с моими предыдущими попытками.
Заранее большое спасибо за вашу помощь и опыт!
РЕДАКТИРОВАТЬ : результат, который я хотел бы получить:
>>> a
array([[[ 7., 9., 1.], # changed the second number here
[ 9., 6., 9.]],
[[ 4., 6., 8.],
[ 8., 9., 1.]]]) # changed the second number here