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

爱喝马黛茶的安东尼
リリース: 2019-08-02 14:11:41
オリジナル
16697 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!