Numpy:用于创建3D数组的矢量化操作

时间:2016-03-18 03:48:31

标签: python arrays numpy

我正在学习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个非随机颜色,我想按顺序使用矢量化操作加快这个过程(并学习更多关于它们)。这是最有效的方法吗?

1 个答案:

答案 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