可以說我有一個矩陣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