我正在学习Python,并希望找到一种使用Numpy
解决此问题的有效方法。
我目前有一个包含随机整数的4x8
数组:
import numpy as np
n = 3
k = np.random.randint(n, size = (4,8))
每个数字代表由RGB
数组中的nx3
值定义的颜色:
colors = np.array([[0 , 0 , 0 ],
[0 , 100, 255],
[255, 100, 0 ]])
我想使用这些数字来创建一个新的4x8x3
数组,其中前两个维度代表像素位置,第三个维度代表每个像素的颜色。这可以被认为是数字绘画。例如,如果k[3,4] = 2
,则为myArray[3,4,:] = [255 100 0]
。
我熟悉Numpy
工具,但我不确定我应该寻找什么。由于数组k
最终会更大(我在思考〜640x480
)并包含超过n = 3
个非随机颜色,我想按顺序使用矢量化操作加快这个过程(并学习更多关于它们)。这是最有效的方法吗?
答案 0 :(得分:1)
IIUC,您需要做的就是使用colors
索引k
:
>>> k = np.random.randint(n, size = (2,4))
>>> out = colors[k]
>>> out
array([[[ 0, 100, 255],
[255, 100, 0],
[255, 100, 0],
[255, 100, 0]],
[[ 0, 100, 255],
[ 0, 100, 255],
[255, 100, 0],
[255, 100, 0]]])
>>> out.shape
(2, 4, 3)
>>> all((out[i]==colors[c]).all() for i,c in np.ndenumerate(k))
True