случайным образом выбрать позицию в массиве с условием - PullRequest
0 голосов
/ 12 января 2020

У меня есть такой массив:

A = [[1,0,2,3],
     [2,0,1,1],
     [3,1,0,0]]

, и я хочу получить позицию одной из ячеек со значением == 1, например A[0][0] или A[1][2] и так далее. ..

Пока я сделал это:

A = np.array([[1,0,2,3],
              [2,0,1,1],
              [3,1,0,0]])

B = np.where(A == 1)

C = []
for i in range(len(B[0])):
    Ca = [B[0][i], B[1][i]]
    C.append(Ca)

D = random.choice(C)

Но теперь я хочу повторно использовать D для получения значения ячейки обратно. Например:

A[D] (который не работает) должен возвращать то же самое, что и A[1][2]

Кто-нибудь, как это исправить, или знает даже лучшее решение?

Ответы [ 2 ]

1 голос
/ 12 января 2020

Это должно работать для вас.

A = np.array([[1,0,2,3],
              [2,0,1,1],
              [3,1,0,0]])

B = np.where(A == 1)

C = []
for i in range(len(B[0])):
    Ca = [B[0][i], B[1][i]]
    C.append(Ca)


D = random.choice(C)
print(A[D[0]][D[1]])

Это дает вывод.

>>> print(A[D[0]][D[1]])
1

Поскольку значение D будет иметь вид [X,Y], значение может быть полученный из матрицы как A[D[0]][D[1]]

0 голосов
/ 12 января 2020

Кажется, вы пытаетесь случайным образом выбрать одну из ячеек, где A равно 1. Вы можете использовать numpy для этого до конца, вместо того, чтобы прибегать к циклам for

B = np.array(np.where(A == 1))

>>> B
array([[0, 1, 1, 2],
       [0, 2, 3, 1]])

Теперь, чтобы случайным образом выбрать столбец, соответствующий одной из ячеек, мы можем использовать np.random.randint

column = np.random.randint(B.shape[1])
D = B[:, column]

>>> D
array([1, 2])  # corresponds to the second index pair in B

Теперь вы можете просто индексировать в A, используя кортеж D (чтобы соответствовать индексы размеров) как

>>> A[tuple(D)]
1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...