2013-01-25 38 views
0

下面的代码是为了检查Python ND-Array列中的NaN值而编写的。如果temparr1或temparr2中有NaN,我们从它们两个中删除相应的行。问题是,它似乎没有工作。你能帮我解决吗?检查ND阵列中的Nan值并删除它们

 temparr1=arr[index[indexkey]][:]// We get a column from arr, an nd-array of size 0 to 9470 
     temparr2=arr[index[secondIndexKey]][:]// Same as above, but with the next column 
     rwc=range(0,len(arr)) We get a bit vector of a sort to check. 
     for i in range(0,len(arr)): 
      if(isnan(temparr1[i]) or isnan(temparr2[i])): 
       rwc = rwc[:i-1]+rwc[i+1:] // Remove the value from the bit Vector for a NaN value in the arrays. 
       print i 
     temparr1 = [] 
     temparr2 = [] 
     for i in rwc: 
      temparr1.append(arr[index[indexkey]][i]) 
      temparr2.append(arr[index[secondIndexKey]][i])// Extract the data for the corresponding values in RWC and get them into the temparrs. 

有人可以告诉我为什么它不工作,为什么我仍然得到NaNs?

的Array看起来像:[99242122,楠,42,楠,414,................]

回答

1

rwc=range(0,len(arr))之后,你有len(rwc)=len(arr),所以在行rwc = rwc[:i-1]+rwc[i+1:]您预计irwcarr相同的索引。

你做rwc = rwc[:i-1]+rwc[i+1:]后,但是你得到更小的长度(len(rwc) = len(arr) -2)的列表,以便下一次迭代过程中,你开始删除从列表中错误的元素。

而且我怀疑你打算做rwc = rwc[:i]+rwc[i+1:],这是另一种错误

据我了解你试图做这样的事情:

X=arr[index[indexkey]] 
Y=arr[index[secondIndexKey]] 

temparr1 = [] 
temparr2 = [] 
for i in range(len(X)): #I assume len(X)=len(Y) 
    if not (isnan(X[i]) or isnan(Y[i])): 
     temparr1.append(X[i]) 
     temparr2.append(Y[i]) 
+0

感谢的人...ü可能会如何改正这个? –