[英]error dimension when manipulating a matrix in python
我有一個 shape(6,5) 定義為的矩陣:
blockmat= [[1,1,1,1,1],[4,4,4,4,4], [2,2,2,2,2], [5,5,5,5,5], [3,3,3,3,3], [6,6,6,6,6]]
在 matlab 中,這行代碼:
for i = 1:2
blockMat(((n*(i-1))+1): (n*i),((n*(i-1))+1): (n*i)) = eye(n) #n=3
在第一次迭代中給了我一個形狀為 (6,5) 的矩陣,在第二次迭代中給了我一個 (6,6) 矩陣,但是在 python 中,當我寫道:
for i in range(1,3):
blocMat[3*(i-1): 3*i, 3*(i-1): 3*i]= np.eye(3)
我收到了這個錯誤:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-9-c4459263db11> in <module>
22
23 for i in range(1,3):
---> 24 blocMat[3*(i-1): 3*i, 3*(i-1): 3*i]= np.eye(3)
25
26
ValueError: could not broadcast input array from shape (3,3) into shape (3,2)
如果您只是在for
循環中添加print(blockmat[3*(i-1): 3*i, 3*(i-1): 3*i])
,您可以看到,當n=1
時,您是得到一個3X3
矩陣 - 你可以更新到eye
。
但是當n=2
時,您將獲得3X2
矩陣 - 您無法對其進行eye
操作。
您可以通過多次打印清楚地看到 - 逐步更新blockmat
:
import numpy as np
blockmat= np.array([[1,1,1,1,1],[4,4,4,4,4], [2,2,2,2,2], [5,5,5,5,5], [3,3,3,3,3], [6,6,6,6,6]])
print(blockmat)
for i in range(1,3):
print(blockmat[3*(i-1): 3*i, 3*(i-1): 3*i])
blockmat[3*(i-1): 3*i, 3*(i-1): 3*i] = np.eye(3)
print(blockmat)
當n=2
時,您會收到錯誤消息。
既然其他回答者已經解釋了導致這個錯誤的原因,我會給你一個解決方法。
將形狀值傳遞給np.eye()
import numpy as np
blockmat= np.array([[1,1,1,1,1],[4,4,4,4,4], [2,2,2,2,2], [5,5,5,5,5], [3,3,3,3,3], [6,6,6,6,6]])
for i in range(1,3):
x = blockmat[3*(i-1): 3*i, 3*(i-1): 3*i]
x = np.eye(x.shape[0],x.shape[1])
print(x.shape)
Output:
(3, 3)
(3, 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.