[英]Stackplot “TypeError: ufunc 'isfinite' not supported for the input types”
[英]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))
,沒有任何作用。 有任何想法嗎?
您的數組具有object
的dtype
,但這應該是一些浮點dtype
。 使用例如
covMat = np.array(covMat, dtype=float)
在轉換dtype
如果出現此錯誤,則意味着您調用的np.isfinite
在后台使用了 np.isfinite。 這樣做的常見功能是np.allclose
、 np.isclose
和linalg
方法(如在 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.