Простая модная индексация в нескольких измерениях

Допустим, у меня есть массив A размером n x m x k ​​и другой массив B размера n x m с индексами от 1 до k. Я хочу получить доступ к каждому n x m фрагменту A, используя индекс, указанный в этом месте в B, давая мне массив размером n x m.

Edit: очевидно, это не то, что я хочу! [[Я могу добиться этого, используя take вот так:

A.take (B) ]] конец редактирования

Можно ли этого добиться с помощью причудливой индексации? Я бы подумал, что A [B] даст тот же результат, но эти результаты в массиве размером n x m x m x k ​​(что я действительно не понимаю).

Причина, по которой я не хочу использовать take , заключается в том, что я хочу присвоить этой части что-то вроде

A [B] = 1

Единственное рабочее решение, которое У меня пока есть

A.reshape (-1, k) [np.arange (n * m), B.ravel ()]. ​​Reshape (n, m)

, но, безусловно, должен быть более простой способ?

5
задан Andreas Mueller 5 January 2012 в 14:08
поделиться