簡體   English   中英

Python Numpy 類型錯誤:輸入類型不支持 ufunc 'isfinite'

[英]Python Numpy TypeError: ufunc 'isfinite' not supported for the input types

這是我的代碼:

def topK(dataMat,sensitivity):
    meanVals = np.mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals
    covMat = np.cov(meanRemoved, rowvar=0)
    eigVals,eigVects = np.linalg.eig(np.mat(covMat))

我在上面最后一行的標題中得到錯誤。 我懷疑它與數據類型有關,因此,這是 Spyder 中變量資源管理器中變量和數據類型的圖像:

變量數據類型

我試過將np.linalg.eig(np.mat(covMat))更改為np.linalg.eig(np.array(np.mat(covMat)))np.linalg.eig(np.array(covMat)) ) np.linalg.eig(np.array(covMat)) ,沒有任何作用。 有任何想法嗎?

您的數組具有objectdtype ,但這應該是一些浮點dtype 使用例如

covMat = np.array(covMat, dtype=float)

在轉換dtype

如果出現此錯誤,則意味着您調用的np.isfinite在后台使用了 np.isfinite。 這樣做的常見功能是np.allclosenp.iscloselinalg方法(如在 OP 中)。 正如jmd_dk 的回答所提到的,這通常意味着你的數組的 dtype 是object

一個常見的修復方法是將數組轉換為float dtype。

covMat = covMat.astype(float)

另一種常見情況是連接/堆棧出錯或數組來自另一種數據類型(例如 pandas 數據幀)。 在這種情況下,請先嘗試轉換為列表,然后轉換為np.ndarray

arr = np.array(arr.tolist())

例如,對於以下情況,直接重鑄將不起作用,但轉換為列表然后轉換為 ndarray 可行。

arr = pd.Series([np.array([1,2]), np.array([3,4]), np.array([5,6])]).values
# array([array([1, 2]), array([3, 4]), array([5, 6])], dtype=object)

np.array(arr, dtype=float)                  # <---- error
np.array(arr.tolist(), dtype=float)         # <---- no error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM