2

gアイテムを返すことを事前に知っているジェネレーターがありnます。各項目iの構造は次のとおりです。

t_i:(e_i, b_i)

t_i可変サイズのタプルであり、 list の任意の順序付きサブシーケンスを含むことができます(1,...,n)。たとえばn=6t_1=(1, 3, 4)t_2=(2, 4, 6)などです。

e_iは数値 (float/integer) でありb_i、boolean (実際にはここでは使用されません) です。

そのようなものn x nを使用して(numpy配列を使用して)行列を構築する最も効率的な方法は何だろうかg

行列の各行iは、次のように対応します。 1. 位置が表示されるt_i:(e_i, b_i)(行列内の) 行要素は、2. 他の行要素はデフォルトで.t_ie_i0

たとえば、行列の行28 x 8item に対応する場合t_2:(e_2, b_2) = (2, 4, 6):(13, True)、この行は として設定する必要があります(0, 13, 0, 13, 0, 13, 0, 0)t_2ここでは(またはt_i一般的に)の数値にゼロ インデックスを使用していないことに注意してください。

明白な方法は、前もって行列を構築n x nし、ジェネレーターによって返された各項目を調べ、項目に基づいて各行を順番に設定することです。しかし、Python のパワー、特にそのパワーを考えると、これを行うにはもっと効率的な方法が必要だと思いますnumpy

4

1 に答える 1

1

Numpy で n 行 n 列の行列を作成するのは簡単で、かなり効率的です。高度なインデックス作成を使用して行を設定することで、非常にシンプルで効率的な実装を実現できます。

arr = np.zeros((n,n))
for i,(t,e,b) in enumerate(g):
    arr[i,np.array(t) - 1] = e

これはg、 が形式のタプルを生成すると仮定していることに注意してください(ti, ei, bi)

于 2012-10-24T16:35:39.960 に答える