Numpy在数组中创建值的索引并替换其他值

时间:2015-07-17 17:43:53

标签: python arrays numpy indexing

我在RGB中有两组具有相同长度的值XYZnp.arraysRGBXYZ中的值对应于两个不同颜色空间中的相同值,它们在矢量中的外观顺序是相同的。

我有另一个数组RGB_picture,其中包含与RGB中列出的值类似的值。

我想找到一种方法,将RGB中的RGB_picture值替换为新数组XYZ中相应的XYZ_picture值。

示例:

RGB = np.array([[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,1]])

XYZ = np.array([[0.237,0.32,0.8642], [0.43234,0.34,1], [0.2432,.31,0.324], [0.3242,1.324,1.234], [1.32,0.4,0.23], [1.432,0.32423,1.342], [1.234,1.324,1.324324]])

#6 pixels image
RGB_image = np.array([[[0,0,1],[0,0,1],[0,0,1],
                       [0,1,1],[1,0,0],[1,0,1]]])

"""I want to return this"""

>print XYZ_image 

>[[0.43234,0.34,1],[0.43234,0.34,1],[0.43234,0.34,1]],

>[0.3242,1.324,1.234], [1.32,0.4,0.23], [1.432,0.32423,1.342]]

我试着用numpy做但却找不到怎么样,你会帮忙吗?

这是我所拥有的,但它不是一个笨拙的解决方案,所以它很慢:

XYZ_image = np.zeros_like(RGB_image)

w, h = RGB_image.shape

for i in xrange(w):
    for j in xrange(h):
        pixel = RGB_image[i,j]

        for k in xrange(len(RGB)):

            rgb = RGB[k]

            if rgb == pixel:

                XYZ_image[i,j] = XYZ[k]
                break

1 个答案:

答案 0 :(得分:1)

听起来您正在尝试将RGB值用作索引。您可以使用常规Python解决此问题。做一个

的词典
my_dict = {RGB_value_1: XYZ_Value_1, RGB_value_2: XYZ_Value_2, etc}

然后为RGB_picture中的每个值

my_dict[RGB_picture_value]

编辑:使用您的代码

my_dict = {RGB[i]: XYZ[i] for i in range(len(RGB))}
return [my_dict[x] for x in RGB_image]

请注意,为此,RGB和RGB_picture值必须是不可变的(如元组)