Расширенная индексация: векторизованный способ назначения массива (32,125) в массив (13,13,32,125) путем индексации последнего с помощью двух (32,) массивов. - PullRequest
0 голосов
/ 20 февраля 2019

Я строю входной конвейер для нейронной сети.У меня есть несколько массивов со следующими свойствами:

bboxes.shape => (32,125)
x_cell.shape => (32,)
y_cell.shape => (32,)
output.shape => (13,13,32,125)

То, что я хочу сделать, можно записать как цикл for, повторяющий пакет (размер пакета = 32):

for i in range(32):
    output[x_cell[i], y_cell[i], i, :] = bboxes[i]

#eg shapes of indexing: output[(1,), (1,), (1,), :] = (125,)

Однако я не хочу использовать цикл for, поскольку он будет медленным.Как в дальнейшем использовать возможности numpy, такие как многомерное индексирование, np.moveaxis () ... и т. Д., Чтобы сделать это элегантно?

1 Ответ

0 голосов
/ 20 февраля 2019

Мы можем использовать advanced-indexing -

N = len(bboxes)
output[x_cell[:N],y_cell[:N],np.arange(N)] = bboxes

Для случая, когда длины ячеек x и y равны длине bboxes, это будетупростить до -

output[x_cell,y_cell,np.arange(N)] = bboxes
...