【问题标题】:Matrix of different shaped matrices Python不同形状矩阵的矩阵 Python
【发布时间】:2020-07-17 14:03:20
【问题描述】:

我正在尝试使用 python 通过 numpy.linal.solve 求解线性方程组。 方程式如下所示:Ax=b.

在我的情况下,A 应该是不同矩阵的矩阵[[W,U.T],[U,0]], 其中 W 是 150x150 numpy 数组,U.T 是 150x11 numpy 数组,U 因此是 11x150 numpy 数组。
结果 b 应该是一个看起来像这样的向量:[0,y], 其中 y 是一个 1x11 向量。

我的问题是我不知道如何连接矩阵 A 的矩阵。 我已经尝试使用 numpy 类的连接或堆栈运算符。但这会产生一个 161x161 矩阵 A ,我需要一个 2x2 矩阵。 因此,我想我必须将每个矩阵作为一个条目处理,但由于形状不同,我不知道该怎么做。

我希望有人可以帮助我。我真的被困在这里了。

【问题讨论】:

  • 你想如何得到一个从 161x161 元素开始的 2x2 矩阵?
  • A (2,2) 数组将是对象 dtype,包含数组。 np.linalg.solve 不能用于此。它需要一个数字数组,例如 (161,161) 形状。

标签: python numpy matrix vector linear-programming


【解决方案1】:

您需要将矩阵重塑为二维并确保保持正确的数学表达式。

如果我没记错的话,你想要表达以下等式:

W_1,1 x_1 + W_1,2 x_2 + ... + W_1,150 x_150 + U_1,1 x_151 + ... + U_11,1 x_161 = 0
...
W_150,1 x_1 + W_150,2 x_2 + ... + W_150,150 x_150 + U_1,150 x_151 + ... + U_11,150 x_161 = 0
U_1,1 x_1 + ... + U_1,150 x_150 = y_1
...
U_11,1 x_1 + ... + U_11,150 x_150 = y_11

因此,您将需要一个形状为(161, 161) 的矩阵A,其中左上角用W(150x150) 元素填充,右上角用U.T(150x11) 元素填充,左下角用U 的(11x150) 个元素填充,右下角用(11x11) 零填充。 您的数组b 的形状为(161,),包含151 个零和y 的11 个元素。

即:

A[:150,:150] = W
A[:150,150:] = U.T
A[150:,:150] = U
A[150:,150:] = 0

b[:150] = 0
b[150:] = y

确保所有数量都是 numpy 数组。 结果 x 也将具有 (161,) 形状。

我不认为 np.linalg.solve 支持嵌套维度。但它不应该是必要的。

【讨论】:

  • 感谢您的评论,实际上我构建了一个向量b,这是错误的。它现在正在工作。
猜你喜欢
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2021-09-10
  • 2023-03-16
相关资源
最近更新 更多