python - 在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)
解决方案
如果你只是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
你得到错误。
推荐阅读
- jquery - textarea 在每次按键时更改其高度
- javascript - Firebase Firestory 查询过去存储的时间戳
- nginx - 我们的 nginx 服务器正在自行停止
- apache - Apache 上的反向代理
- javascript - 如何使用 Node.js 实时记录所有 UDP 连接?
- powershell - 如何获取 Google Chrome 的版本号?
- java - getLocalCertificates() 返回 null
- java - 如何在mongodb Spring boot中的数组内添加数据
- android - 将持有 Retrofit 实例的单例
- ember.js - Ember.js - 处理属性翻译的正确方法是什么?