我正在使用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