ホームページ  >  記事  >  バックエンド開発  >  Python で区分関数を定義する方法

Python で区分関数を定義する方法

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-08-02 14:11:4116736ブラウズ

Python で区分関数を定義する方法

Python では区分関数をどのように定義するのでしょうか?以下は区分関数です。

Python で区分関数を定義する方法

最初に、要素ごとにのみ実行できる log_norm0 の単純なバージョンを作成しました。言うまでもなく、要素の数が多いベクトルは確実に遅くなります。

その後、インジケータ関数を使用してセグメンテーションの 2 つの状況を区別することを考え、log_norm1 を取得しました。ただし、この状況は非常に特殊であり、毎回正常に構築できるわけではありません。

関連する推奨事項: "Python ビデオ チュートリアル "

最後に、関数 Piecewise(x, condlist, funclist, *args, **kw) があることがわかりました。 numpy では、セグメント化された関数を構築するために特別に使用されます。x は入力、condlist はセグメント化の条件を表し、funclist は対応するセグメントの処理関数を表します。これにより、log_norm2 が得られます。

# elementwise
def log_norm0(x):
    if x >= 0:
        return np.log(x + 1)
    else:
        return - np.log(- x + 1)
# indicator
def log_norm1(x):
    # ind = np.where(x > 0, 1, 0)
    ind = (x > 0)
    return np.log(x * ind + 1) - np.log(- x * (1.0 - ind) + 1)
# numpy.piecewise()
def log_norm2(x):
    return np.piecewise(x, [x >= 0, x < 0], [lambda x: np.log(1 + x), lambda x: - np.log(1 - x)])

最後に、各関数の実行時間を観察します。

tic = time.time()
for i in range(x.size):
    y[i] = log_norm0(x[i])
toc = time.time()
print(&#39;log0: &#39;, toc - tic)
tic = time.time()
y = log_norm1(x)
toc = time.time()
print(&#39;log1: &#39;, toc - tic)
tic = time.time()
z = log_norm2(x)
toc = time.time()
print(&#39;log2: &#39;, toc - tic)

観察結果は、インジケーター関数を使用する方法が依然として最速であることを示していますが、区分的方法とあまり変わりません。

rree

以上がPython で区分関数を定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。