首页 > 解决方案 > 在python中操作矩阵时的错误维度

问题描述

我有一个形状(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)

标签: pythonmatlabsyntax

解决方案


如果你只是print(blockmat[3*(i-1): 3*i, 3*(i-1): 3*i])在你的for循环中添加,你可以看到,什么时候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你得到错误。


推荐阅读