在numpy数组中复制元素

时间:2016-09-27 18:22:56

标签: python arrays numpy replicate

我有一个numpy数组说

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

我有一个相同大小的数组'复制',其中复制[i,j](> = 0)表示沿着该行重复[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])

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

1 个答案:

答案 0 :(得分:3)

您可以展开replication数组,然后使用a的{​​{3}}方法:

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]])