假设我有一个矩阵X (1000x10)
和一个矩阵Y (20x10)
。我希望有效地将Y
重复添加到(20x10)
的每个X
块中(因此有50个块)。 numpy有一种有效的方法吗?我不想使用np.repeat
,因为原始矩阵很大,我想防止Y
不必要的重复。有什么想法吗?
答案 0 :(得分:2)
您可以利用argument list unpacking,NumPy broadcasting和the fact that ndarray.reshape()
returns a view来执行此操作:
tmp = X.reshape(-1, *Y.shape)
tmp += Y
不会分配其他数据,在这些操作之后,X
将包含操作的结果。
答案 1 :(得分:0)
您可以使用np.tile
“展开”(更准确地说,平铺)较小的数组以匹配较大数组的大小,例如
x = np.zeros([1000,10])
y = np.ones([20,10])
new_x = x + np.tile(y,(50,1))
这将在内存中创建一个临时的大型数组,以便添加到x
,但会立即被丢弃,因此它取决于您的内存容量和数组的大小,但我相信它是最有效的在CPU使用率和可读性方面。
另一种选择当然是循环遍历较大的阵列并将较小的阵列广播到它的每一部分(在这种情况下为50次)但是它会耗费更多时间并且在CPU方面效率较低,但是记忆力更轻。
第二个选项的示例:
for i in range(0,len(x),20):
x[i:i+20,:] = y