TypeError:\uGetItem\uu()只接受2个参数(给定2个)TypeError?(Python 3)

2024-09-22 16:38:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我定义了以下函数:

def eigval(matrix):
    a = matrix[0, 0]
    b = matrix[0, 1]
    c = matrix[1, 0]
    d = matrix[1, 1]
    c1 = (a + d) + sqrt((4 * b * c) + ((a - d)**2))
    c2 = (a + d) - sqrt((4 * b * c) + ((a - d)**2))
    return c1 / 2, c2 / 2

它是用来求2x2矩阵的特征值的。我用它在矩阵上迭代运行Jacobi算法。传入的矩阵是一个字典,它使用元组作为键来表示位置,并将浮点作为值。这个函数可以在大约6次迭代中正常工作,但是我将得到一个:

^{pr2}$

在块的第一行(带a的那个)。在

我完全被这个弄糊涂了,因为就像我说的,它可以很好地运行6次,然后停下来。在

编辑:这里有一个函数可以创建我要传入的矩阵: (假设每次迭代的矩阵都不同)

def create():
    matrix = {}
    matrix[0, 0] = 2
    matrix[0, 1] = 1
    matrix[1, 0] = 1
    matrix[1, 1] = 2
    return matrix

非常感谢任何帮助!(P.S.第一个帖子在这里)


Tags: 函数算法return字典定义def矩阵sqrt
1条回答
网友
1楼 · 发布于 2024-09-22 16:38:51

你的矩阵是一个使用元组作为键的dict,这可能不是你想做的。在

尝试使用嵌套列表:

from math import sqrt

def create():
    matrix = [[1, 2], [1, 2]]
    return matrix

def eigval(matrix):
    a = matrix[0][0]
    b = matrix[1][0]
    c = matrix[0][1]
    d = matrix[1][1]
    c1 = (a + d) + sqrt((4 * b * c) + ((a - d)**2))
    c2 = (a + d) - sqrt((4 * b * c) + ((a - d)**2))
    return [c1 / 2, c2 / 2]

>>> m = create() 
>>> eigval(m)
[3.0, 0.0]

或者使用numpy:

^{pr2}$

相关问题 更多 >