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

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
從那里獲取所有非零坐標(biāo)和樣本更容易:
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貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
你可以argwhere嘗試permutation
a = np.array([[0, 1], [1, 0]])
b = np.argwhere(a)
tuple(np.random.permutation(b)[0])
添加回答
舉報(bào)
0/150
提交
取消