[英]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.