我正在創建一個 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 的錯誤
uj5u.com熱心網友回復:
回傳的串列串列get_nth_matrix(16)包含太大而無法放入 numpy 整數型別的整數。當您使用np.linalg.solve()此串列串列時,它會被轉換為一個 numpy 陣列,但由于這個大小問題,它會生成一個 Python 物件陣列。發生錯誤是因為np.linalg.solve()無法處理這種型別的陣列。您可以替換最后一行的get_nth_matrix()有
return np.array(coeficients, dtype=float), augment
解決這個問題 - 至少對于不會溢位浮點型別的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/389386.html
