最近我在学习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 –
嗯,我想我得到了原因......也许是因为周期零计算循环.... –