假設我有 2D numpy 數組,值為 0 和 1。我想隨機選擇一個包含 1 的索引。有沒有有效的方法可以使用 來做到這一點numpy?我用純Python實現了它,但是太慢了。輸入示例:[[0, 1], [1, 0]]輸出:(0, 1)編輯:為了澄清:我希望我的函數獲取值屬于 {0, 1} 的 2D numpy 數組。我希望輸出是從給定數組中隨機(均勻)選取值的元組(2D 索引),該值等于 1。EDIT2:根據 Paul H 的建議,我想出了這個: nonzero = np.nonzero(a)
return random.choice(list(zip(nonzero)))但它不適用于 numpy 的隨機選擇,僅適用于 python 的隨機選擇。有沒有辦法可以更好的優化呢?
2 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
從那里獲取所有非零坐標和樣本更容易:
xs,ys = np.where([[0, 1], [1, 0]])
# randomly pick a number:
idx = np.random.choice(np.arange(len(xs)) )
# output:
out = xs[idx], ys[idx]

慕村225694
TA貢獻1880條經驗 獲得超4個贊
你可以argwhere嘗試permutation
a = np.array([[0, 1], [1, 0]])
b = np.argwhere(a)
tuple(np.random.permutation(b)[0])
添加回答
舉報
0/150
提交
取消