为什么在尝试求解 16x16 方程组时 np.linalg.solve 会出现错误?
Why does np.linalg.solve give me an error when trying to solve a 16x16 system of equations?
我正在创建一个 nxn 矩阵,其最大值为 n**n。 np.linalg.solve
在 n < 16 时有效,但对于 n >= 16,它给出错误:
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'solve1' input 0 from dtype('O') to dtype('float64') with casting rule 'same_kind'
这是我的代码:
import numpy as np
def fib_to(n):
if n==0: return [0]
fibs = [0, 1]
for i in range(2, n+1):
fibs.append(fibs[-1] + fibs[-2])
return fibs
def get_nth_matrix(n):
coeficients = [[i**j for j in range(n, -1, -1)] for i in range(n+1)]
augment = fib_to(n)
return coeficients, augment
print(np.linalg.solve(*get_nth_matrix(16)))
我也注意到在矩阵上做np.linalg.cond
也有同样的问题。它适用于最大 15 的值,但当 n 为 16 或更大时给出除以 0 的错误
get_nth_matrix(16)
返回的列表列表包含太大而无法放入 numpy 整数类型的整数。当您使用 np.linalg.solve()
时,这个列表列表会转换为一个 numpy 数组,但由于这个大小问题,它会生成一个 python 对象数组。发生错误是因为 np.linalg.solve()
无法处理这种类型的数组。您可以将 get_nth_matrix()
的最后一行替换为
return np.array(coeficients, dtype=float), augment
解决这个问题 - 至少对于不会溢出 float 类型的值。
我正在创建一个 nxn 矩阵,其最大值为 n**n。 np.linalg.solve
在 n < 16 时有效,但对于 n >= 16,它给出错误:
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'solve1' input 0 from dtype('O') to dtype('float64') with casting rule 'same_kind'
这是我的代码:
import numpy as np
def fib_to(n):
if n==0: return [0]
fibs = [0, 1]
for i in range(2, n+1):
fibs.append(fibs[-1] + fibs[-2])
return fibs
def get_nth_matrix(n):
coeficients = [[i**j for j in range(n, -1, -1)] for i in range(n+1)]
augment = fib_to(n)
return coeficients, augment
print(np.linalg.solve(*get_nth_matrix(16)))
我也注意到在矩阵上做np.linalg.cond
也有同样的问题。它适用于最大 15 的值,但当 n 为 16 或更大时给出除以 0 的错误
get_nth_matrix(16)
返回的列表列表包含太大而无法放入 numpy 整数类型的整数。当您使用 np.linalg.solve()
时,这个列表列表会转换为一个 numpy 数组,但由于这个大小问题,它会生成一个 python 对象数组。发生错误是因为 np.linalg.solve()
无法处理这种类型的数组。您可以将 get_nth_matrix()
的最后一行替换为
return np.array(coeficients, dtype=float), augment
解决这个问题 - 至少对于不会溢出 float 类型的值。