Я не думаю, что можно напрямую указать двумерный массив вероятностей. Так что бродить должно быть хорошо. Однако, чтобы получить соответствующие двумерные индексы из плоского индекса, вы можете использовать np.unravel_index
index= np.unravel_index(xy.item(), x.shape)
# (4, 2)
Для нескольких индексов вы можете просто сложить результат:
xy=np.random.choice(x.flatten(),3,p=p.flatten())
indices = np.unravel_index(xy, x.shape)
# (array([4, 4, 5], dtype=int64), array([1, 2, 3], dtype=int64))
np.c_[indices]
array([[4, 1],
[4, 2],
[5, 3]], dtype=int64)
, где np.c_
складывается вдоль правой оси и дает тот же результат, что и
np.column_stack(indices)