我有一个N乘2乘2的数值矩阵A。对于{0...,N-1}中的所有i,我想计算:
解算(Ai,b)
其中B是2 x 2和Ai=Ai,:,:。我尝试在numpy中使用np.linalg.solve使用我认为正确的广播操作在以下代码中完成此操作(下面的A和b仅用于演示目的,实际的矩阵A要大得多):
import numpy as np
A = np.array([[[1,2],[3,4]],[[2,3],[5,6]],[[3,4],[5,6]]])
b = np.eye(2)
np.linalg.solve(A, b)但我得到以下错误:
ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (3,2,2)->(3,newaxis) (2,2)->(2,newaxis) and requested shape (2)我有点困惑..。我以前使用过numpy广播,在过去做这种性质的操作时从来没有遇到过问题……有人知道我做错了什么吗?
发布于 2019-02-02 00:20:27
您正在尝试求解N个不同的方程系统,实际上您传递的是一个N×2×2矩阵A,但只传递了一个2×2矩阵b。这就是说操作数不能一起传播时所指的错误。
如果要求解从0到N-1的所有i的Ai x = b,其中Ai为2×2,那么还需要形状为N×2×K (在您的情况下为N×2×2)的b。
假设你总是想要b = eye(2),像这样的东西就可以工作了
>>> A = np.array([[[1,2],[3,4]],[[2,3],[5,6]],[[3,4],[5,6]]])
>>> b = np.array([np.eye(2),np.eye(2),np.eye(2)])
>>> np.linalg.solve(A, b)这是输出:
array([[[-2. , 1. ],
[ 1.5 , -0.5 ]],
[[-2. , 1. ],
[ 1.66666667, -0.66666667]],
[[-3. , 2. ],
[ 2.5 , -1.5 ]]])https://stackoverflow.com/questions/54482849
复制相似问题