簡體   English   中英

在numpy數組中映射值

[英]Mapping values in a numpy array

如何從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函數的一兩個襯墊可以完成此任務? 謝謝!

您可能要考慮結構化數組,因為它允許元組而數據類型不是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.]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM