【问题标题】:Replicating elements in numpy array复制numpy数组中的元素
【发布时间】:2016-09-27 18:22:55
【问题描述】:

我有一个 numpy 数组说

a = array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])

我有一个大小相同的数组“复制”,其中 replication[i,j](>=0) 表示 a[i][j] 应该沿行重复多少次。显然,复制数组遵循 np.sum(replication[i]) 对所有 i 具有相同值的不变量。 例如,如果

replication = array([[1, 2, 1],
                     [1, 1, 2],
                     [2, 1, 1]])

那么复制后的最终数组是:

new_a = array([[1, 2, 2, 3],
           [4, 5, 6, 6],
           [7, 7, 8, 9]])

目前,我这样做是为了创建 new_a:

 ##allocate new_a
 h = a.shape[0]
 w = a.shape[1]
 for row in range(h):
      ll = [[a[row][j]]*replicate[row][j] for j in range(w)]
      new_a[row] = np.array([item for sublist in ll for item in sublist])

但是,这似乎太慢了,因为它涉及使用列表。我可以完全在 numpy 中完成预期,而不使用 python 列表吗?

【问题讨论】:

    标签: python arrays numpy replicate


    【解决方案1】:

    您可以展平您的replication 数组,然后使用a.repeat() 方法:

    import numpy as np
    
    a = array([[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]])
    
    replication = array([[1, 2, 1],
                         [1, 1, 2],
                         [2, 1, 1]])
    
    new_a = a.repeat(replication.ravel()).reshape(a.shape[0], -1)
    
    print(repr(new_a))
    # array([[1, 2, 2, 3],
    #        [4, 5, 6, 6],
    #        [7, 7, 8, 9]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多