在numpy数组中映射值-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在numpy数组中映射值

一码平川MACHEL 2019-01-22 17:25:55 955

我如何从2D numpy数组中获取,我只有三个不同的值:-1,0和1,并将它们映射到颜色red(255,0,0),green(0,255,0)和blue(255,0, 0)?阵列非常大,但为了让你知道我在寻找什么,想象一下我有输入

array([[ 1, 0, -1],

   [-1,  1,  1],
   [ 0,  0,  1]])

我想要输出:

array([[(0, 0, 255), (0, 255, 0), (255, 0, 0)],

   [(255, 0, 0), (0, 0, 255), (0, 0, 255)],
   [(0, 255, 0), (0, 255, 0), (0, 0, 255)]])

我可以循环并有条件,但我想知道是否有一个或两个班轮使用lambda函数可以实现这一点?

Python
分享到
取消 提交回答
全部回答(2)
  • 游客drl6uevi2k7uk
    2019-07-17 23:26:22

    palette = np.array( [ [0,0,0], # black
    ... [255,0,0], # red

    ... [0,255,0], # green
    ... [0,0,255], # blue
    ... [255,255,255] ] ) # white

    image = np.array( [ [ 0, 1, 2, 0 ], # each value corresponds to a color in the palette

    ... [ 0, 3, 4, 0 ] ] )

    palette[image] # the (2,4,3) color image

    array([[[ 0, 0, 0],

        [255,   0,   0],
        [  0, 255,   0],
        [  0,   0,   0]],
       [[  0,   0,   0],
        [  0,   0, 255],
        [255, 255, 255],
        [  0,   0,   0]]])
    
    0 0
  • 一码平川MACHEL
    2019-07-17 23:26:22

    您可能想要考虑结构化数组,因为它允许没有数据类型的元组object。

    import numpy as np

    replacements = {-1: (255, 0, 0), 0: (0, 255, 0), 1: (0, 0, 255)}

    arr = np.array([[ 1, 0, -1],

                [-1,  1,  1],
                [ 0,  0,  1]])
    

    new = np.zeros(arr.shape, dtype=np.dtype([('r', np.int32), ('g', np.int32), ('b', np.int32)]))

    for n, tup in replacements.items():

    new[arr == n] = tup
    

    print(new)
    输出:

    [[( 0, 0, 255) ( 0, 255, 0) (255, 0, 0)]
    [(255, 0, 0) ( 0, 0, 255) ( 0, 0, 255)]
    [( 0, 255, 0) ( 0, 255, 0) ( 0, 0, 255)]]
    另一个选择是使用3D数组,其中最后一个维度是3。第一个“层”是红色,第二个“层”是绿色,第三个“层”是蓝色。此选项与plt.imshow()。兼容。

    import numpy as np

    arr = np.array([[ 1, 0, -1],

                [-1,  1,  1],
                [ 0,  0,  1]])
    

    new = np.zeros((*arr.shape, 3))

    for i in range(-1, 2):

    new[i + 1, arr == i] = 255

    输出:

    array([[[ 0., 0., 255.],

        [255.,   0.,   0.],
        [  0.,   0.,   0.]],
    
       [[  0., 255.,   0.],
        [  0.,   0.,   0.],
        [255., 255.,   0.]],
    
       [[255.,   0.,   0.],
        [  0., 255., 255.],
        [  0.,   0., 255.]]])
    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题