如何为 numpy.linalg.solve()“重塑”成方阵?

数据挖掘 麻木的 线性代数
2022-02-24 23:00:27

我试图找到线的交点y=a1x+b1y=a2x+b2使用numpy.linalg.solve(). 我无法理解的是如何正确制作A用于工作的方阵solve()我熟悉求解线性方程组,但这里有些东西我不明白。

我想做的是:

def meeting_lines(a1, b1, a2, b2):
    a = np.array([[a1], [a2]])
    b = np.array([b1, b2])
    return np.linalg.solve(a, b)

def main():
    a1=1
    b1=4
    a2=3
    b2=2

    y, x = meeting_lines(a1, b1, a2, b2)

我期望的地方y=3x=1. 但是,这失败了numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square

非常感谢您的帮助,试图弄清楚这一点已经把我的一天搞砸了!

1个回答

您应该如下制定您的行(x,y)作为未知数: 因此,代码应该是:

a1xy=b1a2xy=b2}[a11a21]a[xy]x=[b1b2]b

import numpy as np

def meeting_lines(a1, b1, a2, b2):
    a = np.array([[a1, -1], [a2, -1]])
    b = np.array([-b1, -b2])
    return np.linalg.solve(a, b)

a1=1
b1=4
a2=3
b2=2
x, y = meeting_lines(a1, b1, a2, b2)
print(x, y)

输出:

1.0 5.0