我有一個二維形狀矩陣,(3, 4)索引范圍從 0 到 8:
a = array([[0, 4, 1, 2],
[5, 0, 2, 3],
[8, 6, 0, 5]])
目前,我使用for回圈來構建一個 3D 布爾形狀陣列,(9, 3, 4)該陣列存盤True在每個索引的位置,對于 0 到 8 之間的每一行:
b = np.zeros((9, 3, 4), dtype=bool)
for i in range(9):
b[i] = np.where(a == i, True, False)
有沒有辦法在不迭代的情況下實作相同的結果,也許使用 numpy 函式?
uj5u.com熱心網友回復:
這是您要找的東西嗎?
import numpy as np
a = np.array([[0, 4, 1, 2],
[5, 0, 2, 3],
[8, 6, 0, 5]])
y, x = np.mgrid[0:a.shape[0], 0:a.shape[1]]
data = np.zeros((9,) a.shape, dtype=bool)
data[a, y, x] = True
uj5u.com熱心網友回復:
利用 numpy 廣播的一個非常簡短的解決方案:
b = np.array([a]*9) == np.arange(9).reshape(-1,1,1)
輸出:
>>> b
array([[[ True, False, False, False],
[False, True, False, False],
[False, False, True, False]],
[[False, False, True, False],
[False, False, False, False],
[False, False, False, False]],
[[False, False, False, True],
[False, False, True, False],
[False, False, False, False]],
[[False, False, False, False],
[False, False, False, True],
[False, False, False, False]],
[[False, True, False, False],
[False, False, False, False],
[False, False, False, False]],
[[False, False, False, False],
[ True, False, False, False],
[False, False, False, True]],
[[False, False, False, False],
[False, False, False, False],
[False, True, False, False]],
[[False, False, False, False],
[False, False, False, False],
[False, False, False, False]],
[[False, False, False, False],
[False, False, False, False],
[False, False, False, False]]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/389393.html
