python - 错误:数组的最后 2 个维度必须是正方形
问题描述
我定义u
和v
u = np.array([[1],
[1]])
v = np.array([[1],
[-1]])
我想找到A
Au = np.array([[3],
[2]])
Av = np.array([[-1],
[-2]])
所以我这样编码
A = np.linalg.solve(u,Au)
A = np.linalg.solve(v,Av)
print(A)
然后我得到了错误
LinAlgError Traceback (most recent call last)
<ipython-input-21-416fc4de15b6> in <module>
12 [-2]])
13
---> 14 A = np.linalg.solve(u,Au)
15 A = np.linalg.solve(v,Av)
16 print(A)
<__array_function__ internals> in solve(*args, **kwargs)
~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in solve(a, b)
384 a, _ = _makearray(a)
385 _assert_stacked_2d(a)
--> 386 _assert_stacked_square(a)
387 b, wrap = _makearray(b)
388 t, result_t = _commonType(a, b)
~\anaconda3\lib\site-packages\numpy\linalg\linalg.py in _assert_stacked_square(*arrays)
211 m, n = a.shape[-2:]
212 if m != n:
--> 213 raise LinAlgError('Last 2 dimensions of the array must be square')
214
215 def _assert_finite(*arrays):
LinAlgError: Last 2 dimensions of the array must be square
我该如何解决?
解决方案
假设这A
两个方程是相同的,你有 4 个方程和 4 个未知数:
A[0, 0] * u[0] + A[0][1] * u[1] = Au[0]
A[1, 0] * u[0] + A[1][1] * u[1] = Au[1]
A[0, 0] * v[0] + A[0][1] * v[1] = Av[0]
A[1, 0] * v[0] + A[1][1] * v[1] = Av[1]
这可以改写为一个矩阵方程B a = Auv
,其中
a
A
是向量中的值Auv
是连接的向量,Au
并且Av
B
包含 和 的u
值v
。
import numpy as np
u = [1, 1]
v = [1, -1]
Au = [3, 2]
Av = [-1, -2]
B = [
[u[0], u[1], 0, 0],
[0, 0, u[0], u[1]],
[v[0], v[1], 0, 0],
[0, 0, v[0], v[1]]]
Auv = np.concatenate([Au, Av])
A = np.linalg.solve(B, Auv).reshape(2, 2)
print("A:\n", A)
矩阵A
是:
1 2
0 2
推荐阅读
- javascript - 如何使用 JavaScript 删除填充?
- python-3.x - Python Auto Click bot 不起作用,我不知道为什么
- php - 密码保护页面允许输入错误的密码
- prolog - !/0 是否应该穿过 (\+)/1 ?
- c++ - CMake & CodeSynthesis 仅标头库未编译
- asp.net-core - 如何将焦点设置在 Blazor.Typeahead 组件上?
- arrays - 从中心减小的Matlab数组
- primary-key - ERD - 具有不同于超类的复合键的子类
- python-3.x - 比较来自 OpenCV matchTemplate 的 maxVal 以进行动态模板匹配
- c# - SVG 图像作为 AppBarToggleButton 的图标应该看起来被禁用