我有一個用編碼部分構建的 numpy 陣列。這些部分以 2x2 塊的形式出現。我有一個很大的字典,說明應該用什么來替換那些 2x2 塊。如何用字典中的值替換那些 2x2 代碼。
info_dict = {
5: np.array([[1, 0], [1, 0]], "int"),
6: np.array([[1, 0], [0, 1]], "int"),
7: np.array([[0, 1], [1, 0]], "int"),
8: np.array([[1, 1], [0, 0]], "int"),
}
print(np.array([[5, 5, 8, 8], [5, 5, 8, 8], [6, 6, 7, 7], [6, 6, 7, 7]]))
print(np.array([[1, 0, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1], [0, 1, 1, 0]]))
# before (coded)
[[5 5 8 8]
[5 5 8 8]
[6 6 7 7]
[6 6 7 7]]
# after (final matrix)
[[1 0 1 1]
[1 0 0 0]
[1 0 0 1]
[0 1 1 0]]
以供參考
#5
[[1 0]
[1 0]]
#6
[[1 0]
[0 1]]
#7
[[0 1]
[1 0]]
#8
[[1 1]
[0 0]]
uj5u.com熱心網友回復:
一種方法:
import numpy as np
info_dict = {
5: np.array([[1, 0], [1, 0]], "int"),
6: np.array([[1, 0], [0, 1]], "int"),
7: np.array([[0, 1], [1, 0]], "int"),
8: np.array([[1, 1], [0, 0]], "int"),
}
a = np.array([[5, 5, 8, 8], [5, 5, 8, 8], [6, 6, 7, 7], [6, 6, 7, 7]])
np.block([[info_dict[b] for b in r] for r in a[::2, ::2]])
它給:
[[1 0 1 1]
[1 0 0 0]
[1 0 0 1]
[0 1 1 0]]
uj5u.com熱心網友回復:
假設您的字典中有少量整數,并且您的正方形在N一邊,您info_dict如下:
mapping = np.zeros((max(info_dict) 1, N, N), dtype=int)
for channel, value in info_dict.items():
mapping[channel] = value
如果您可以開始以這種格式存盤字典,那就更好了。現在您可以使用簡單的索引和一些重新排列來獲得結果:
after = mapping[before[::N, ::N]].transpose(0, 2, 1, 3).reshape(before.shape)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/389382.html
上一篇:比較二維布爾陣列
