Numpy: вставить значение в 2d с 2 x 1d, используя необычную индексацию - PullRequest
0 голосов
/ 17 апреля 2020

Мне бы хотелось, чтобы индексирование представлялось массивом с индексами строк / столбцов. У меня есть массив с номерами столбцов (индекс столбца), который я извлек из функции argmax,

. При этом я хотел бы превратить нулевую двумерную матрицу в 1 (или True) для индекса, соответствующего к этому столбцу индекса. Строки идут от 0 до 4

Ниже приведены мои испытания и то, как я вижу проблему.

matrix1 = np.zeros((5, 10))
matrix2 = np.zeros((5, 10))
matrix3 = np.zeros((5, 10))
matrix4 = np.zeros((5, 10))
matrix5 = np.zeros((5, 10))

row = np.array([0,1,2,3,4])
column = np.array([9,9,2,3,9,2,1,3,3,1])

matrix1[row, column] = 1
matrix2[[row, column]] = 1
matrix3[[row], [column]] = 1
matrix4[[[row], [column]]] = 1
matrix5[([row], [column])] = 1

Как мне заставить его работать так, как задумано?

РЕДАКТИРОВАТЬ: В дополнение к вышеприведенному случаю, существует случай, когда вам нужно только 1 (одно) значение в строке.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Звучит немного наивно, но интуитивно я сначала найду все возможные комбинации индексов.

matrix1 = np.zeros((5, 10))
row = np.array([0,1,2,3,4])
column = np.array([9,9,2,3,9,2,1,3,3,1])

index = np.stack(np.meshgrid(row,column), -1).reshape(-1,2) 
matrix1[index[:,0], index[:,1]] = 1

Надеюсь, это поможет.

0 голосов
/ 17 апреля 2020

В дополнение к описанному выше случаю существует случай, когда вам нужно только 1 (одно) значение в строке. Экстраполируя на ответы из @hpaulj и @ ashuto sh -chapagain, например, решение будет выглядеть так:

row = np.array([0,1,2,3,4])
column = np.array([9,9,2,3,9])

matrix2[row[:,None], column[:,None]] = 1

, а результат будет выглядеть так:

fanzy idx one per row

...