У меня есть два массива, один представляет собой матрицу из пар индексов,Numpy: 2D доступ к массиву с 2D-массив индексов
a = array([[[0,0],[1,1]],[[2,0],[2,1]]], dtype=int)
, а другая является матрица данных для доступа на эти индексы
b = array([[1,2,3],[4,5,6],[7,8,9]])
и я хочу использовать индексы a для получения записей b
. Просто делать:
>>> b[a]
не работает, так как она дает один ряд б для каждой записи в a
, т.е.
array([[[[1,2,3],
[1,2,3]],
[[4,5,6],
[4,5,6]]],
[[[7,8,9],
[1,2,3]],
[[7,8,9],
[4,5,6]]]])
, когда я хотел бы использовать пару индексов в последних осях a
чтобы дать два индекса b
:
array([[1,5],[7,8]])
есть чистый способ сделать это, или мне нужно, чтобы изменить b
и объединить столбцы a
в соответствующей форме?
В моей реальной проблеме a
имеет около 5 миллионов записей, а b
- 100 на 100, я бы хотел избежать циклов.
Похоже, что у вас есть дополнительная скобка вокруг 'a'. Использует ли 'a = array ([[0,0], [1,1], [2,0], [2,1]], dtype = int)' work? – colcarroll
@JLLagrange это должно быть там. 'a.shape' должен быть' (2,2,2) 'или, более общо,' (n, m, 2) 'и результатом' (n, m, 1) '(=' (n, m) '). – Lucas