0

私は自分のクラスメトリックに取り組んでいます

import numpy as np

class Metric(object):
    def __init__(self,*args):
        self.min = min(args)
        self.max = max(args)
        self.median = np.percentile(args,50)
        self.avg = sum(args)*1.0/len(args)
        self.len = len(args)
        self.std = np.std(args)
        self.var = np.var(args)
        self.IQR = np.percentile(args,75)-np.percentile(args,25)
        self.relief_ratio = (self.avg-self.min)*1.0/(self.max-self.min)

を使用せずに尖度を計算する関数をネストしたいと考えていfrom scipy.stats import kurtosisます。この例に従うと、尖度の式は次のようになります。

def avg(obs):
    return (1. / len(obs)) * np.sum(obs)

def variance(obs):
    return (1. / len(obs)) * np.sum((obs - avg(obs)) ** 2)

def kurt(obs):
    num = np.sum((obs - avg(obs)) ** 4)/ len(obs)
    denom = variance(obs) ** 2  # avoid losing precision with np.sqrt call
    return num / denom

私の質問は次のとおりです。

  1. 正しい python スタイルはどれですか? avgvariance、およびkurtクラスの外側または内側に書き込む必要がありますか?
  2. 内側の場合、どのスタイルが最適ですか?
4

1 に答える 1

3

これらはネストされた関数ではありません。それらは互いに呼び出す関数にすぎません。ネストされた関数は、他の関数を含む関数です。

私はそれらを外に置いておきます。これらの関数は、クラスのほとんどのものを気にせず、クラスのコンテキストなしで理解できる単純な引数と戻り値を持ち、クラスとは無関係に数値のリストで完全に役立ちます. なぜそれらを隠すのですか?

于 2013-02-24T22:39:44.443 に答える