最近我在學習Python numpy時遇到了一個問題。其實我是一個遠程服務器上測試自定義的功能,而這個功能使用numpy.linalg.eig:在Numpy數組中刪除NaN和Infs
import numpy
from numpy import *
def myfun(xAr,yAr) #xAr, yAr are Matrices
for i in xrange(xAr.shape[1]):
Mat=xAr.T*yAr*yAr.T*xAr
val,vec=linalg.eig(Mat)
# and so on...
和測試提供了錯誤報告「線1088,在EIG:數組不能包含infs或NaN「。
因此,我試圖刪除包含的NaN或INF中那些列,我的代碼是:
def myfun(xAr,yAr)
id1=isfinite(sum(xAr,axis=1))
id2=isfinite(sum(yAr,axis=1))
xAr=xAr[id1&id2]
yAr=yAr[id1&id2]
for i in xrange(xArr.shape[1]):
Mat=xAr.T*yAr*yAr.T*xAr
val,vec=linalg.eig(Mat)
# and so on...
但是同樣的錯誤再次出現。
我不知道此測試的確切數據值,因爲此測試位於遠程服務器上,原始數據值被禁止顯示。我所知道的是數據是一個包含NaN和Infs的矩陣。
任何人都可以給我一些建議,爲什麼是有限的無法在這裏工作,或者我刪除這些NaN和Infs做錯了?
http://stackoverflow.com/questions/6701714/numpy-replace-a-number-with-nan –
嗯,我想我得到了原因......也許是因爲週期零計算循環.... –