簡體   English   中英

在 python 中操作矩陣時的錯誤維度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM