所以說我有一個像這樣的numpy陣列:
[[2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 2 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 0 0 0 2 1 1 1 1 1 1 1 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 2 1 1 2 0 0 0 0 2 2 2 1 1 2 2 2 2 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 2 1 1 2 0 0 0 0 0 0 2 1 1 2 0 0 0 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 2 1 1 2 0 0 0 0 0 0 2 1 1 2 0 0 0 0]
[2 2 2 2 2 1 1 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 2 1 1 2 0 0 0 0 0 0 2 1 1 2 0 0 0 0]
[0 0 0 0 2 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 2 0 0 0 0 0 0 2 1 1 2 0 0 0 0]
[0 0 0 0 2 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 2 0 0 2 2 2 2 2 1 1 2 2 0 0 0]
[0 0 0 0 2 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 2 2 0 2 1 1 1 1 1 1 1 2 0 0 0]
[2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 2 1 1 1 2 0 2 1 1 1 1 1 1 1 2 0 0 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 2 1 1 1 2 0 2 1 1 1 1 1 1 1 2 0 0 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 2 1 1 1 2 0 2 1 1 1 1 1 1 1 2 0 0 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 2 1 1 1 2 0 2 2 2 2 2 2 2 2 2 0 0 0]
[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0]
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
我想在陣列中選擇一個隨機位置,它有一個 1,我該怎么做?
uj5u.com熱心網友回復:
使用np.argwhere和random.choice:
import numpy as np
import random
a = np.random.choice([0, 1, 2], (20, 20))
i = random.choice(np.argwhere(a == 1))
uj5u.com熱心網友回復:
您可以numpy.where用來識別值為 1 的單元格的坐標,然后從此輸出中選擇一個(或多個)隨機索引:
# test array
a = np.random.randint(0, 3, size=(15, 10))
# get coordinates where a == 1
coords = np.c_[np.where(a==1)]
# pick N random cells
N = 1
out = coords[np.random.choice(coords.shape[0], N, replace=False)]
# check
x,y = out[0]
assert a[x,y] == 1
例子: (5, 3)
A:
array([[0, 1, 0, 1, 1, 2, 0, 2, 0, 0],
[0, 2, 1, 2, 2, 0, 1, 1, 1, 1],
[0, 1, 0, 0, 1, 2, 0, 2, 0, 1],
[1, 2, 0, 1, 1, 1, 0, 2, 0, 2],
[2, 0, 2, 0, 0, 0, 1, 1, 2, 0],
[0, 1, 0, 1, 2, 2, 0, 1, 1, 1],
[1, 2, 2, 2, 0, 2, 1, 0, 1, 2],
[0, 0, 2, 0, 0, 0, 0, 0, 0, 2],
[0, 2, 1, 1, 1, 0, 1, 1, 1, 0],
[1, 2, 0, 1, 2, 0, 2, 0, 1, 2],
[2, 1, 0, 1, 1, 0, 2, 2, 2, 2],
[1, 2, 2, 2, 2, 2, 0, 1, 2, 2],
[1, 2, 1, 0, 2, 2, 0, 2, 0, 0],
[2, 0, 2, 2, 2, 0, 0, 0, 1, 2],
[0, 1, 2, 2, 2, 1, 0, 0, 0, 0]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414894.html
標籤:
上一篇:將物件保存在陣列中
