2014-02-17 15 views
0

下面是一個函數的簡單示例。它將矢量映射到矢量。但是,應該忽略NaN或inf的條目。目前這看起來對我來說很笨拙。你有什麼建議嗎?Numpy只限於有限的條目

from scipy import stats 
import numpy as np 

def p(vv): 
    mask = np.isfinite(vv) 
    y = np.NaN * vv 
    v = vv[mask] 

    y[mask] = 1/v*(stats.hmean(v)/len(v)) 
    return y 
+0

你對NaN有什麼問題?你的問題是「如何處理NaN」?你的頭銜不是很清楚。 – kkuilla

+0

我只想更多地瞭解它們。我認爲也許有一種更優雅的建築只能在有限的條目上進行操作。 – tschm

+0

這可能是題外話題,因爲你的問題應該是關於一個特定的問題。例如,脫離主題的問題包括「沒有實際的問題需要解決:」我很好奇,如果其他人覺得我喜歡。「請參閱http://stackoverflow.com/help/dont-ask)」 – kkuilla

回答

0

你可以用與NumPy的isnan功能改變NaN值以零,然後刪除零如下:

import numpy as np 

def p(vv): 
    # assuming vv is your array 
    # use Nympy's isnan function to replace the NaN values in the array with zero 

    replace_NaN = np.isnan(vv) 
    vv[replace_NaN] = 0 

    # convert array vv to list 
    vv_list = vv.tolist() 
    new_list = [] 

    # loop vv_list and exclude 0 values: 
     for i in vv_list: 
      if i != 0: 
       new.list.append(i) 

     # set array vv again 

     vv = np.array(new_list, dtype = 'float64') 

     return vv 
1

我已經想出了這樣的結構:

from scipy import stats 
import numpy as np 


## operate only on the valid entries of x and use the same mask on the resulting vector y 
def __f(func, x): 
    mask = np.isfinite(x) 
    y = np.NaN * x 
    y[mask] = func(x[mask]) 
    return y 


# implementation of the parity function 
def __pp(x): 
    return 1/x*(stats.hmean(x)/len(x)) 


def pp(vv): 
    return __f(__pp, vv)