Pythonでeinsum式の最低コストの縮小順序を評価する
einsum式の最小コストの縮小順序を取得するには、Pythonでnumpy.einsum + path()メソッドを使用します。最初のパラメーターである添え字は、合計の添え字を指定します。 2番目のパラメーターであるオペランドは、操作の配列です。
アインシュタインの縮約記法を使用すると、多くの一般的な多次元の線形代数配列演算を簡単な方法で表すことができます。暗黙モードでは、einsumはこれらの値を計算します。
明示的モードでは、einsumは、指定された添え字ラベルに対して合計を無効にするか、強制することにより、従来のEinstein合計操作とは見なされない可能性のある他の配列操作を計算するためのさらなる柔軟性を提供します。
結果のパスは、入力収縮のどの条件を最初に収縮する必要があるかを示し、この収縮の結果が収縮リストの最後に追加されます。その後、このリストは、すべての中間収縮が完了するまで繰り返すことができます。
ステップ
まず、必要なライブラリをインポートします-
import numpy as np
テンソル-
p = np.random.rand(2, 2) q = np.random.rand(2, 5) r = np.random.rand(5, 2)
einsum式の最小コストの縮小順序を取得するには、numpy.einsum + path()メソッド-
を使用します。path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy')
パス情報の表示-
print(path_info[0]) print(path_info[1])
例
import numpy as np np.random.seed(123) # Tensors p = np.random.rand(2, 2) q = np.random.rand(2, 5) r = np.random.rand(5, 2) # To get the lowest cost contraction order for an einsum expression, use the numpy.einsum+path() method in Python path_info = np.einsum_path('ij,jk,kl->il', p, q, r, optimize='greedy') # Displaying Path info print(path_info[0]) print(path_info[1])
出力
['einsum_path', (1, 2), (0, 1)] Complete contraction: ij,jk,kl->il Naive scaling: 4 Optimized scaling: 3 Naive FLOP count: 1.200e+02 Optimized FLOP count: 5.700e+01 Theoretical speedup: 2.105 Largest intermediate: 4.000e+00 elements -------------------------------------------------------------------------- scaling current remaining -------------------------------------------------------------------------- 3 kl,jk->jl ij,jl->il 3 jl,ij->il il->il
-
最小コストパスのためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −コストマトリックスと位置(m、n)が与えられているので、(0、0)から(m、n)に到達するための最小コストパスのコストを見つける必要があります。各セルは、あるセルから別のセルに移動するためのコストを表します。 次に、以下の実装のソリューションを見てみましょう- 例 # dynamic approach R = 3 C = 3 def minCost(cost, m, n): # initialization tc = [[0 for x in range
-
Pythonで辞書式順序で単語を並べ替える
辞書式順序で単語を並べ替えるということは、単語の最初の文字で最初に並べ替えることを意味します。次に、最初の文字が同じである単語については、言語の辞書(データ構造ではない)と同じように、そのグループ内で2番目の文字で並べ替えます。 Pythonには2つの関数があり、このタイプの順序で並べ替えと並べ替えがあります。これらの各メソッドをいつどのように使用するかを見てみましょう。 インプレースソート:配列/リストをインプレースでソートする場合、つまり現在の構造自体の順序を変更する場合は、sortメソッドを直接使用できます。たとえば、 my_arr = [ "hello", &q