【发布时间】:2011-11-05 18:34:18
【问题描述】:
我正在使用 3 维数组(就本示例而言,您可以想象它们代表屏幕 X、Y 坐标处的 RGB 值)。
>>> 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
【问题讨论】:
标签: python numpy python-2.7