我正在使用python實現Strassen的矩陣乘法。在分步驟中,我們將較大的矩陣分成較小的子矩陣。是否有一個內置的numpy函數來分割一個矩陣?如何使用numpy將矩陣分成4個塊?
6
A
回答
11
不完全是,但使用數組切片符號,你應該可以很容易地做到這一點。
>>> A = np.linspace(0,24,25).reshape([5,5,])
>>> A
array([[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[ 10., 11., 12., 13., 14.],
[ 15., 16., 17., 18., 19.],
[ 20., 21., 22., 23., 24.]])
製作A中的B左上2×2:
>>> B = A[0:2,0:2]
注意,B是視圖,其與
>>> B[1,1] = 60
>>> print A
[[ 0. 1. 2. 3. 4.]
[ 5. 60. 7. 8. 9.]
[ 10. 11. 12. 13. 14.]
[ 15. 16. 17. 18. 19.]
[ 20. 21. 22. 23. 24.]]
共享數據。如果您需要複製的數據從A,使用複製方法:
>>> B = A[0:2,0:2].copy()
>>> B
array([[ 0., 1.],
[ 5., 60.]])
>>> B[1,1] = 600
>>> B
array([[ 0., 1.],
[ 5., 600.]])
>>> A
array([[ 0., 1., 2., 3., 4.],
[ 5., 60., 7., 8., 9.],
[ 10., 11., 12., 13., 14.],
[ 15., 16., 17., 18., 19.],
[ 20., 21., 22., 23., 24.]])
2
我碰到同樣的問題,並發現了一些內置的numpy的功能到我的矩陣分割成4子矩陣(我的矩陣是大小爲2^N * 2^N)
這裏是我寫的代碼:
upper_half = np.hsplit(np.vsplit(my_matrix, 2)[0], 2)
lower_half = np.hsplit(np.vsplit(my_matrix, 2)[1], 2)
upper_left = upper_half[0]
upper_right = upper_half[1]
lower_left = lower_half[0]
lower_right = lower_half[1]
獎金使用numpy的重組它們:
C=np.vstack([np.hstack([c11, c12]), np.hstack([c21, c22])])
VSPLIT hsplit hstack和vstack似乎爲此目的作出
相關問題
- 1. Numpy:如何隨機地將一個矩陣分成n個不同的矩陣
- 2. 如何將1D矩陣拆分爲4個1D子矩陣?
- 3. 將矩陣分成10個子矩陣
- 4. R:分割矩陣成塊
- 5. 如何將塊轉換爲塊對角矩陣(NumPy)
- 6. 如何將它變成一個numpy矩陣?
- 7. 將矩陣分成子組矩陣
- 8. 將矩陣分成更小的矩陣
- 9. rownames將矩陣分割成子矩陣
- 10. 如何截斷矩陣使用NumPy(Python)
- 11. 如何將矩陣分成等份?
- 12. 使用NumPy矩陣的列
- 13. 變換矩陣1×4成4X1矩陣
- 14. 如何在matlab中將矩陣塊連接到單個矩陣?
- 15. 使用另一個矩陣對NumPy矩陣進行子集
- 16. 如何乘numpy矩陣乘numpy數組?
- 17. 如何結合兩個python矩陣numpy
- 18. 將分區矩陣分成N個大小相同的塊(塊)R
- 19. 拆分numpy的陣列分成兩個numpy的陣列
- 20. 如何將矩陣分成基於另一矢量幾個矩陣
- 21. 陣列矩陣numpy
- 22. 如何使用numpy將數組和矩陣排序在一起
- 23. 如何將一列和一個矩陣組合成一個更大的具有`numpy`的矩陣?
- 24. Numpy Toeplitz矩陣
- 25. 如何將多個numpy 2d矩陣(不同大小)存儲到一個numpy矩陣中?
- 26. 分而治之矩陣乘法基本情況+如何矩陣分成4個季度
- 27. 如何生成一個numpy矩陣的不錯輸出?
- 28. Python Numpy - 附加三個陣列形成矩陣或3D陣列
- 29. 的Python:如何結合4小矩陣成爲一個大型矩陣
- 30. 加入兩個numpy矩陣