python - Numpy Linalg 解决广播
问题描述
我有一个 N x 2 x 2 numpy 矩阵 A。对于 {0...,N-1} 中的所有 i,我想计算:
解决(Ai, b)
其中 B 为 2 x 2 且 Ai=A[i,:,:]。我尝试在 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 广播,过去从未遇到过这种性质的操作问题...有人知道我在这里做错了什么吗?
解决方案
您正在尝试求解 N 个不同的方程组,实际上您正在传递一个 N×2×2 矩阵 A,但只传递一个 2×2 矩阵 b。这就是说操作数不能一起广播时所指的错误。
如果要求解Ai x = b
从 0 到 N-1 的所有 i,其中 Ai 为 2×2,则还需要b
形状为 N×2×K(在你的情况下为 N×2×2)。
假设您总是想要,类似的东西会起作用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 ]]])
推荐阅读
- java - 关闭 apache CloseableHttpConnection 并正确处理关闭异常
- jenkins - 立即中止多分支作业,结果将失败
- android - Xamarin Forms:从android中的应用程序注销时停止接收FCM通知?
- javascript - ES6 模块 - 创建不可变服务的最佳方法
- kubernetes - 如何在 ISTIO 中配置 TLS 发起?
- go - 如何在 StackDriver ErrorReporting UI 中填充响应代码
- python - 处理线程内的无限循环函数
- google-sheets - 如何在谷歌文档中加入除当前单元格之外的所有单元格?
- python - 如何让 Notepad++ 运行我当前的 Python 3 脚本?
- javascript - td 内的百里香迭代和值的特殊选择