0

私は次のクラスを持っています

def get_percentile(obs,*args):
    lstper = []
    for arg in args:
        lstper.append(np.percentile(obs,arg))
    return lstper

get_percentile([1,2,3,4,5],25,50,75)
[2.0, 3.0, 4.0]

class Metric(object):
    def __init__(self,*args):
        self.max = max(args)
        self.median =np.median(args)
        self.min = min(args)
        self.percentile = get_percentile(args)

self.percentile = get_percentile(args)さまざまなパーセンタイルを取得するための正しいセットがわかりません

4

1 に答える 1

1

これを解決する 1 つの方法は、次の代わりに名前付きキーワード引数を使用することです*args

def get_percentile(obs,*args):
    if len(args) == 0:
        args = [25,50,75] # default to quartiles
    lstper = []
    for arg in args:
        lstper.append(np.percentile(obs,arg))
    return lstper

class Metric(object):
    def __init__(self, values=[], percentiles=[]):
        self.max = max(values)
        self.median =np.median(values)
        self.min = min(values)
        self.percentile = get_percentile(values, percentiles)

実際に:

>>> m = Metric(range(30,300,13), [20,40,60,80])
>>> m.max
290
>>> m.percentile
[[82.0, 134.0, 186.0, 238.0]]

または、 を使い続けたい場合argsは、値とパーセンタイルをリスト (またはタプル、ディクテーション、セットなど) で与えることができます。これは必要です。そうしないと、一方がどこで終わり、もう一方がどこで始まるかを判断できません。

class Metric(object):
    def __init__(self, *args):
        if not len(args) == 2:
            raise ValueError("Usage: Metric([values],[percentiles])")
        values, percentiles = args
        self.max = max(values)
        self.median =np.median(values)
        self.min = min(values)
        self.percentile = get_percentile(values, percentiles)

使い方は上と同じ。

于 2013-02-25T15:56:53.477 に答える