python - python矩阵乘法广播错误
问题描述
我试图在同一行中将 5 个矩阵相乘并得到以下错误,
ValueError Traceback (most recent call last)
<ipython-input-32-4809be28729a> in <module>
95 u_prev = np.transpose(u[t-1, :]).reshape(-1,1)
96
---> 97 x[t] = np.mat(A)*np.mat(x_prev) + np.mat(B)*np.mat(u_prev) + np.mat(process_noise)
ValueError: could not broadcast input array from shape (9,1) into shape (9)
这是代码片段:有多个数组 A、B、x_prev、u_prev、随机噪声。只需要将它们相乘。
A = np.matrix([[1, 0, 0, ts, 0, 0, 1/2*ts**2, 0, 0],
[0, 1, 0, 0, ts, 0, 0, 1/2*ts**2, 0],
[0, 0, 1, 0, 0, ts, 0, 0, 1/2*ts**2],
[0, 0, 0, 1, 0, 0, ts, 0, 0],
[0, 0, 0, 0, 1, 0, 0, ts, 0],
[0, 0, 0, 0, 0, 1, 0, 0, ts],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1]])
B = np.zeros((9, 3))
# --- update the state
process_noise = 0 + np.sqrt(Q)*np.random.uniform(-1,1)
process_noise = np.transpose(np.matrix(process_noise))
t = np.arange(0,5,0.1)
u = np.zeros((len(t), 3))
x = np.zeros((len(t), 9))
for t in range(1,t.size):
u[0, :] = np.array([Fx, Fy, Fz]) # set initial input
u[t, :] = np.array([Fx, Fy, Fz])
x_prev = np.transpose(x[t-1, :]).reshape(-1,1)
u_prev = np.transpose(u[t-1, :]).reshape(-1,1)
x[t] = np.mat(A)*np.mat(x_prev) + np.mat(B)*np.mat(u_prev) + np.mat(process_noise)
我也试过x[t] = A * x_prev + B * u_prev + process_noise
但得到同样的错误。
解决方案
这是在循环中进行矩阵乘法的正确方法:
In [74]: A = np.arange(9).reshape(3,3)
In [75]: x = np.zeros((3,3))
In [76]: y = np.ones((3,))
In [77]: x[0]
Out[77]: array([0., 0., 0.])
In [78]: np.dot(A,y)
Out[78]: array([ 3., 12., 21.])
In [79]: x[0] = np.dot(A,y)
In [80]: x
Out[80]:
array([[ 3., 12., 21.],
[ 0., 0., 0.],
[ 0., 0., 0.]])
您正在尝试执行以下操作:
In [81]: y = np.ones((3,1))
In [82]: y
Out[82]:
array([[1.],
[1.],
[1.]])
In [83]: np.dot(A,y)
Out[83]:
array([[ 3.],
[12.],
[21.]])
In [84]: x[0] = np.dot(A,y)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-84-48dd32783c97> in <module>
----> 1 x[0] = np.dot(A,y)
ValueError: could not broadcast input array from shape (3,1) into shape (3)
In [85]: np.mat(A)*np.mat(y)
Out[85]:
matrix([[ 3.],
[12.],
[21.]])
推荐阅读
- python - Pandas str.contains 示例返回属性错误
- typescript - 类成员的类型保护
- javascript - 如何在 React 中的 div 下单击(或模拟单击)?
- java - 如何排除某些属性被序列化
- python - 使用 model.predict() 显示准确度和损失
- gcc - 不在同一个编译单元中的 gcc 或 clang 内联函数可以吗?
- c - C waitpid,这是矛盾的吗?
- python - 破折号扩展问题下载生成为字节流的 PDF 文件
- java - 当我们从命令提示符键入 software -version 时如何返回版本
- android - Android BLE 配对后自动重新连接