我正在使用3维数组(对于本示例的目的,您可以想象它们代表屏幕的X,Y坐标处的RGB值)。Numpy:如何将值分配给多维数组的单个元素?
>>> 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通道已经低于5那些像素G通道。我可以设法隔离我感兴趣的像素:
>>> 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
谢谢安德烈,但结果不是我想要的。我只想更改“G”通道(值中的第二个元素)。我将编辑我的问题,澄清这一点。 – mac