Вы можете просто получить тензорное представление с помощью np.broadcast_to
-
np.broadcast_to(a[...,None,None],a.shape+(k,l)) # a is input array
Преимущество будет в том, что с ним не будет дополнительной нагрузки на память и, следовательно, будет фактически свободное время работы.
Если вам нужен вывод массива с собственным пространством памяти, добавьте .copy()
.
Пример выполнения -
In [9]: a = np.random.rand(2,3)
In [10]: k,l = 4,5
In [11]: np.broadcast_to(a[...,None,None],a.shape+(k,l)).shape
Out[11]: (2, 3, 4, 5)
# Verify memory space sharing
In [12]: np.shares_memory(a,np.broadcast_to(a[...,None,None],a.shape+(k,l)))
Out[12]: True
# Verify virtually free runtime
In [17]: a = np.random.rand(100,100)
...: k,l = 100,100
...: %timeit np.broadcast_to(a[...,None,None],a.shape+(k,l))
100000 loops, best of 3: 3.41 µs per loop