Dav*_*d_D 6 python linear-equation numpy matrix
我想举一个简单的例子来说明我想做的事情。我有一些在此步骤之前计算并存储在矩阵中的数据。在这个简单的例子中,我们只取两个 2x2 矩阵。它们看起来像这样:
A1=np.array([[1, 2], [0.5, 1.5]])
A2=np.array([[0.5, 1.2], [1.3, 2]])
Run Code Online (Sandbox Code Playgroud)
我也有解向量 b,它可能看起来像:
b=[4, 3]
Run Code Online (Sandbox Code Playgroud)
现在我想解决线性方程组 Ax=b 的所有可能组合,这些组合可以从存储在矩阵 A1 和 A2 中的数据创建。在两个矩阵中,列的数据相互连接。因此,从我的示例中求解的可能线性方程组如下所示:
LES1:
1 * x1 + 0.5 * x2 = 4
0.5 * x1 + 1.3 * x2 = 3
Run Code Online (Sandbox Code Playgroud)
LES2:
1 * x1 + 1.2 * x2 = 4
0.5 * x1 + 2 * x2 = 3
Run Code Online (Sandbox Code Playgroud)
LES3:
2 * x1 + 0.5 * x2 = 4
1.5 * x1 + 1.3 * x2 = 3
Run Code Online (Sandbox Code Playgroud)
LES4:
2 * x1 + 1.2 * x2 = 4
1.5 * x1 + 2 * x2 = 3
Run Code Online (Sandbox Code Playgroud)
通过使用,np.linalg.solve(Ax, b)我得到了四组x1和x2值,这些值将在下一步中进行评估,以找到匹配特定要求的输入数据的最佳组合。我知道我可以使用嵌套 for 循环对输入数组进行切片A1并A2创建线性方程系统 LES1 到 LES4 并一个接一个地求解它们来解决这个问题。
但在我的实际应用程序中,我需要处理的数据比本例中的多得多,这意味着我有两个以上的矩阵,而且它们也更大,这将创建更多可能的线性方程组组合,需要求解。
如果有人能给我一个提示来解决这个问题而不使用 for 循环来跳过矩阵的列,我会非常高兴。或者也许有一种可能的方法以有效的方式使用 for 循环?
提前感谢大家
大卫
更新:
Mihails 的回答完美地解决了我所描述的问题。然而,当使用我的“现实生活数据”时,发生了两个问题,不幸的是,我在我的问题和所描述的示例中没有考虑到这些问题。
A1=np.array([[4, 2, 3, 5, 4], [1, 0.5, 5, 3, 1], [2, 3, 5, 4, 2]])
A2=np.array([[4, 2, 4], [8, 4, 1], [2, 8, 9]])
A3=np.array([[4, 8, 3, 2], [5, 6, 4, 5], [1, 2, 5, 7]])
Run Code Online (Sandbox Code Playgroud)
我仍然想找到我的实际问题中提到的线性方程组的所有组合。有什么方法可以使给定的解决方案适应此任务?我试图通过阅读itertools文档来解决这个问题,但我无法弄清楚,因为无法像在创建数组 A 时所做的那样使用这些数据创建数组数组。并将它们组合在一个列表中当涉及到与 i 的迭代时会给我一个问题。
pd.DataFrame用于存储时我可以给出列名,但我不确定它们是否可以用于执行我要求的任务。再次感谢您,并为显然是基本的“迷你示例”感到抱歉