【问题标题】:Add dimensions to a tensor and duplicate values along the new axes向张量添加维度并沿新轴重复值
【发布时间】:2019-08-15 18:59:53
【问题描述】:

假设我有一个带有

的 2D ndarray X
X.shape == (m, n)

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

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

对于所有的 i,j

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

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

【问题讨论】:

    标签: python numpy multidimensional-array array-broadcasting


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 正是我需要的,谢谢你的详细回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多