次のように、前の要素に基づいて、2つの相互依存する配列を同時に入力する必要があります。
import numpy as np
a = np.zeros(100)
b = np.zeros(100)
c = np.random.random(100)
for num in range(1, len(a)):
a[num] = b[num-1] + c[num]
b[num] = b[num-1] + a[num]
numpyを使用してこれを本当にベクトル化する(つまり、numpy.vectorizeを使用しない)方法はありますか?これらは任意の配列であり、これらの特定の値の解決策を探すものではないことに注意してください。
@Praveenの投稿で述べたように、閉じた形を見つけようとする数回の反復でこれらの式を書くことができますc
。これはもちろん、の三角行列になります。次に、完全になるために繰り返しスケーリング b[0]
を追加する必要がありb
ます。取得するにはa
、我々は単にのシフトバージョンを追加b
してc
。
したがって、実装に関しては、いくつかNumPy broadcasting
を使用しdot-product
て効率を上げるために、別の見方をします-
p = 2**np.arange(a.size-1)
scale1 = p[:,None]//p
b_out = np.append(b[0],scale1.dot(c[1:]) + 2*p*b[0])
a_out = np.append(a[0],b_out[:-1] + c[1:])
a
とb
が常にとして開始されることを意図している場合0
、最後の2つのステップのコードは次のように単純化されます-
b_out = np.append(0,scale1.dot(c[1:]))
a_out = np.append(0,b_out[:-1] + c[1:])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加