【发布时间】:2022-01-23 02:35:02
【问题描述】:
我正在创建一个最大值为 n**n 的 nxn 矩阵。 np.linalg.solve 在 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 错误
【问题讨论】:
-
对于 n>15,您的值太大而无法转换为
np.int32。如果您使用的是 Windows,则它是np.array的默认 dtype。我不知道np.linalg.solve的实现。如果遇到OverflowError: Python int too large to convert to C long,可能会尝试默认为object。
标签: python numpy matrix runtime-error linear-algebra