TypeError:列表索引必须是整数或切片,而不是元组


import numpy as np
from numpy import array,identity,diagonal
from math import sqrt,asin,acos,sin,cos,atan
def householder(A):
n = len(A)
print(n)
v = np.zeros(n, dtype=np.double)
print(v)
u = np.zeros(n, dtype=np.double)
print(u)
z = np.zeros(n, dtype=np.double)
print(z)
for k in range(0, n - 2):
if np.isclose(A[k + 1][k], 0.0):
α = -np.sqrt(np.sum(A[(k + 1) :, k] ** 2))
else:
α = -np.sign(A[k + 1][k]) * np.sqrt(np.sum(A[(k + 1) :, k] ** 2))
two_r_squared = α ** 2 - α * A[k + 1][k]
v[k] = 0.0
v[k + 1] = A[k + 1][k] - α
v[(k + 2) :] = A[(k + 2) :, k]
u[k:] = 1.0 / two_r_squared * np.dot(A[k:, (k + 1) :], v[(k + 1) :])
z[k:] = u[k:] - np.dot(u, v) / (2.0 * two_r_squared) * v[k:]
for l in range(k + 1, n - 1):
A[(l + 1) :, l] = (
A[(l + 1) :, l] - v[l] * z[(l + 1) :] - v[(l + 1) :] * z[l]
)
A[l, (l + 1) :] = A[(l + 1) :, l]
A[l, l] = A[l, l] - 2 * v[l] * z[l]
A[-1, -1] = A[-1, -1] - 2 * v[-1] * z[-1]
A[k, (k + 2) :] = 0.0
A[(k + 2) :, k] = 0.0
A[k + 1][k] = A[k + 1][k] - v[k + 1] * z[k]
A[k][k + 1] = A[k + 1][k]
print(A)
A= [ [3,2,1,2] , [2,-1,1,2] , [1,1,4,30] , [2,2,3,1] ]
new= householder(A)
print (new)

我得到TypeError:

α = -np。(A[k + 1][k]) * np.sqrt(np。sum(A[(k + 1):, k] ** 2)) TypeError:列表索引必须是整数或切片,不能是元组

我试过像[a],[b],[c]那样分解代码,但是错误仍然存在。

你可以用下面的代码解决这个问题:

A= np.array( [ [3,2,1,2] , [2,-1,1,2] , [1,1,4,30] , [2,2,3,1] ])

最新更新