首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy Linalg解决广播

Numpy Linalg解决广播
EN

Stack Overflow用户
提问于 2019-02-01 23:51:39
回答 1查看 503关注 0票数 1

我有一个N乘2乘2的数值矩阵A。对于{0...,N-1}中的所有i,我想计算:

解算(Ai,b)

其中B是2 x 2和Ai=Ai,:,:。我尝试在numpy中使用np.linalg.solve使用我认为正确的广播操作在以下代码中完成此操作(下面的A和b仅用于演示目的,实际的矩阵A要大得多):

代码语言:javascript
运行
复制
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)

但我得到以下错误:

代码语言:javascript
运行
复制
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广播,在过去做这种性质的操作时从来没有遇到过问题……有人知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 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),像这样的东西就可以工作了

代码语言:javascript
运行
复制
>>> 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)

这是输出:

代码语言:javascript
运行
复制
array([[[-2.        ,  1.        ],
        [ 1.5       , -0.5       ]],

       [[-2.        ,  1.        ],
        [ 1.66666667, -0.66666667]],

       [[-3.        ,  2.        ],
        [ 2.5       , -1.5       ]]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54482849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档