向张量添加尺寸并沿新轴重复值

问题描述 投票:1回答:1

假设我有一个2D数组X.

X.shape == (m, n)

我想在X上添加两个维度,同时沿着这些新轴复制值。即我想要

new_X.shape == (m, n, k, l) 

并为所有我,j

new_X[i, j, :, :] = X[i, j]

实现这一目标的最佳方法是什么?

python numpy multidimensional-array numpy-broadcasting
1个回答
2
投票

你可以简单地用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
© www.soinside.com 2019 - 2024. All rights reserved.