可以说我有一个矩阵X (1000x10)
和矩阵Y (20x10)
的切片。我想有效地添加到Y
的X
每(20x10)
块反复(因此50个块)。有没有一种有效的方式来做到这一点与numpy?我不想用np.repeat
为原矩阵是巨大的,我想阻止的Y
不必要的重复。有任何想法吗?NumPy的添加矩阵到另一个矩阵
0
A
回答
2
您可以利用argument list unpacking,NumPy broadcasting和the fact that ndarray.reshape()
returns a view来执行操作:
tmp = X.reshape(-1, *Y.shape)
tmp += Y
无需额外的数据将被分配这些操作后,X
将包含操作的结果。
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
相关问题
- 1. 连接矩阵到另一个矩阵
- 2. 使用另一个矩阵对NumPy矩阵进行子集
- 3. 2D矩阵的numpy的矩阵乘法,得到三维矩阵
- 4. 从另一个矩阵制作矩阵
- 5. 从另一个矩阵生成矩阵
- 6. 加入两个numpy矩阵
- 7. 阵列矩阵numpy
- 8. 如何将二维矩阵添加到Python中的另一个3D矩阵?
- 9. 构建一个numpy矩阵
- 10. 加载到现有的numpy密集矩阵稀疏scipy矩阵
- 11. 得到两个一维numpy的矩阵
- 12. Numpy Toeplitz矩阵
- 13. 与numpy的一个矩阵的对角矩阵,并SciPy的
- 14. 在矩阵中添加行与矩阵之间的矩阵
- 15. 将阵列的值添加到numpy矩阵的行中
- 16. 插入矩阵到另一个矩阵的在python
- 17. 将矩阵复制到另一个矩阵的子集
- 18. 将矩阵的多行连接到另一个矩阵
- 19. 转移矩阵元到另一个矩阵的对角线
- 20. 用numpy中的另一个小矩阵替换矩阵的子部分
- 21. 写一个numpy矩阵到文件
- 22. 在numpy的矩阵
- 23. 在numpy/scipy中添加一个非常重复的矩阵到一个稀疏的矩阵?
- 24. 按另一个矩阵中的值聚合一个矩阵
- 25. 加快numpy矩阵逆
- 26. 在numpy中加倍矩阵
- 27. 如何浅滩矩阵到另一个矩阵
- 28. 在另一个矩阵中快速找到矩阵
- 29. 旋转矩阵R1 w.r.t到另一个矩阵,说R2
- 30. Python numpy矩阵乘以一个对角矩阵
不同的是,计算'X.reshape()+ Y'分配并创建新的数组,而'TMP + = Y'修改已经分配的值。没有额外的RAM被分配。输出的形状是正确的,因为'X'永远不会改变它的形状。 –
明白了。谢谢。 –
哇!这对我来说很神奇!它是如何工作的?你能解释什么是'* Y.形状'?为什么'X.reshape(-1,* Y.shape)'不会将'X'复制到'tmp'? (它是否像'X'的引用)?谢谢! – Babak