编写下面的代码是为了检查Python ND-Array列中的NaN值。如果temparr1或temparr2中有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?
阵列看起来像:[99,242,122,nan,42,nan,414,................]
答案 0 :(得分:1)
rwc=range(0,len(arr))
len(rwc)=len(arr)
后rwc = rwc[:i-1]+rwc[i+1:]
i
,rwc
行arr
与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])
),因此在下一次迭代中,您开始从列表中删除错误的元素。
另外我怀疑你打算做{{1}},这是另一个错误
据我了解,你试图做这样的事情:
{{1}}