Выборка из двумерного массива - PullRequest
0 голосов
/ 03 декабря 2018

Мне было интересно, существует ли достаточно эффективный способ выборки из двумерного массива.Если у меня есть универсальный массив:

dims = (4,4)
test_array = np.arange(np.prod(dims)).reshape(*dims)
test_array
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

Тогда я бы хотел произвольно установить, скажем, два элемента из него в конкретное значение (скажем, 100).Я попытался создать индексный массив и затем применить это:

sample_from = np.random.randint(low=0, high=5, size=(2,2))
sample_from
array([[0, 2],
       [1, 1]])

Но если я попытаюсь использовать это для индексации, это даст мне немного неожиданный ответ:

test_array[sample_from]
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [ 4,  5,  6,  7]]])

Что яя бы ожидал (и такой результат, который мне нужен), если бы я только что вошел в индексный массив напрямую:

test_array[[0,2],[1,1]] = 100
test_array

, что дает:

array([[  0, 100,   2,   3],
       [  4,   5,   6,   7],
       [  8, 100,  10,  11],
       [ 12,  13,  14,  15]])

Любая помощь, с благодарностью полученная.

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете использовать np.random.choice + np.unravel_index для непосредственного присвоения вашему массиву.

test_array[
    np.unravel_index(np.random.choice(np.prod(dims), 2, replace=False), dims)
] = 100
...