使用python 3进行LU分解

时间:2017-01-21 21:20:44

标签: python python-3.x numpy matrix-factorization

我需要实现LU分解,然后将其与numpy中的$(function() { $('#slides').slidesjs({ width: 800, height: 400, play: { active: true, auto: true, interval: 500, // within the play property, effect should be a string, i.e. "fade" effect: "fade" }, navigation: { effect: "fade" }, pagination: { effect: "fade" }, effect: { fade: { speed: 1000 } } }); }); 函数进行比较。

代码中的函数(见下文)运行没有任何问题,但当我用它来解决矩阵时,我不断收到错误:

np.linalg.solve

就行:

IndexError: list index out of range  

以下是整个代码:

L[i][j] = (A2[i][j] - s2) / U[j][j]

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您的matrixMul方法不正确。试试这个:

matrixMul([[1, 0], [0, 1]], [[1, 0], [0, 1]])

这是两个身份矩阵相乘,并应返回[[1, 0], [0, 1]]。当我运行它时,它返回[[1, 0], []]。这意味着A2lu只有一行,其余为空。因此,i == 1j == 0时的索引错误。

失败的原因是TBzip个对象。那些只能迭代一次,消耗迭代器。我实际上根本不认为你需要TB对象,只是迭代B的元素。

def matrixMul(A, B):
    return [[sum(ea*eb for ea,eb in zip(a,b)) for b in B] for a in A]

返回所需的输出:

>>> matrixMul([[1, 0], [0, 1]], [[1, 0], [0, 1]])
>>> [[1, 0], [0, 1]]

编辑:

顺便说一下,您的解决方案还存在其他问题。你和NumPy的版本仍然不匹配。但是这里的解决方案将修复您的索引错误。