Тем временем я понял, что numpy.broadcast_to также может выполнять эту работу.
В качестве небольшого надуманного примера:
In [8]: np.broadcast_to(arr, (2, 5, 15))
Out[8]:
array([[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]],
[[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]])
Примечание по производительности : После определения времени я обнаружил, что numpy.broadcast_to
составляет ок. 40x быстрее по сравнению с numpy.repeat
.
причина этого прироста производительности заключается в том, что:
Это быстрее, потому что создает представление данных, доступное только для чтения, с большим количеством элементов, указывающих на одни и те же области памяти. Если вы скопируете результат, производительность будет примерно такой же. Если вам не нужно редактировать конечный результат, он обеспечивает значительный прирост производительности