在幫助解決OP 進行一些影像處理的問題時,我遇到了這個問題。無論是否有其他方法可以完成整個事情,在一部分中,我有一個2D np.array整數填充。整數只是掩碼值,每個代表 RGB 顏色。
我有一個字典,其中整數作為鍵,RGB 顏色陣列作為值。這是映射,目標是用顏色替換陣列中的每個 int。
從這個陣列開始,其中所有 RGB 陣列已經被整數替換,所以現在它是一個形狀為 (2,3) 的陣列(最初是形狀 (2,3,3))
import numpy as np
arr = np.array([0,2,4,1,3,5]).reshape(2,3)
print(arr)
array([[0, 2, 4],
[1, 3, 5]])
這是字典(示例中選擇的數字只是隨機的):
dic = {0 : [10,20,30], 1 : [12,22,32], 2 : [15,25,35], 3 : [40,50,60], 4 : [100,200,300], 5 : [250,350,450]}
用陣列替換所有這些值使其成為形狀為 (2,3,3) 的陣列,如下所示:
array([[[ 10, 20, 30],
[ 15, 25, 35],
[100, 200, 300]],
[[ 12, 22, 32],
[ 40, 50, 60],
[250, 350, 450]]])
我進行了調查,np.where因為我認為這對我來說是最明顯的,但我總是得到形狀不正確的錯誤。我不知道我到底卡在哪里,在谷歌搜索時,我遇到了np.dstack, np.concatenate,正在閱讀有關更改形狀的資訊,np.newaxis / None但我只是沒有完成。也許創建一個新陣列np.zeros_like并從那里開始。在插入包含這 3 個 RGB 值的陣列之前,是否需要創建類似占位符的東西?
由于每個鍵都在陣列中,因為它是基于它創建的,所以我考慮回圈遍歷字典,檢查陣列中的鍵并將其替換為 dict.value。我至少在正確的方向上還是什么都沒有?
非常感謝任何幫助!!!
uj5u.com熱心網友回復:
在這方面,我們可以通過解包創建一個字典值陣列,然后根據arr. 所以:
np.array([*dic.values()])[arr]
如果字典鍵沒有按排序順序,我們可以創建一個掩碼陣列以基于它們進行排序,使用np.argsort. 因此,根據掩碼陣列對字典值陣列進行排序后,我們可以再次得到結果,例如:
dic = {0: [10, 20, 30], 2: [15, 25, 35], 3: [40, 50, 60], 1: [12, 22, 32], 4: [100, 200, 300], 5: [250, 350, 450]}
sort_mask = np.array([*dic.keys()]).argsort()
# [0 3 1 2 4 5]
np.array([*dic.values()])[sort_mask][arr]
# [[[ 10 20 30]
# [ 15 25 35]
# [100 200 300]]
#
# [[ 12 22 32]
# [ 40 50 60]
# [250 350 450]]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464615.html
上一篇:獲取numpy2d陣列中的所有行索引,其中每行中的元素在整個陣列中存在超過2次
下一篇:從光流計算散度和卷曲并繪制它
