复制numpy数组中的元素
Replicating elements in numpy array
我有一个 numpy 数组说
a = array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
我有一个相同大小的数组 'replication',其中 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])
但是,这似乎太慢了,因为它涉及到使用列表。我可以在不使用 python 列表的情况下完全在 numpy 中完成预期的工作吗?
您可以展平您的 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]])
我有一个 numpy 数组说
a = array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
我有一个相同大小的数组 'replication',其中 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])
但是,这似乎太慢了,因为它涉及到使用列表。我可以在不使用 python 列表的情况下完全在 numpy 中完成预期的工作吗?
您可以展平您的 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]])