問題は、下の図のように、一連の障害物を通過する信号(光や音など)の伝播をモデル化することです。信号は底面(地形)を通過できませんが、障害物を通過できます。通過した障害物の数を数えたい。
地形と障害物は2Dの数の多い配列(x、y、z)にあります。これが私がすることです:
output = numpy.zeros(terrain.shape)
obstacles = terrain + obstacle_heights
for i in xrange (obstacles.shape[0]):
for j in xrange (obstacles.shape[1]):
mask = obstacles[i,j] > terrain[i,j:]
output[i,j:][mask] +=1
結果は、[0, 0, 0, 1, 1, 1, 2, 3, 4, 4, 4 ...]
行ごとのようなものになります。
この方法は正常に機能します(提供された地形の谷はを使用して埋められますnumpy.maximum.accumulate
)。さて、ベクトル化されたソリューションを使用してスピードアップすることは可能でしょうか?
1
興味深い質問です。どのソリューションを探しているのか、どのデータが入力データなのかを詳しく説明できますか?信号を表すラインの作成(ラインストリングレイヤーとして)を探していると思いますが、この場合、ソース形式に加えて方向も指定する必要があります。
—
mgri 2017年
音響と光の減衰(ヘイズ、煙など)の両方に興味があります。簡単にするために、信号は地形に平行に(垂直に)、地形グリッドに平行に(水平に)移動します。「シグナル」とは、numpyマトリックスに対する単純なイテレーターのみを意味します。
—
Zoran
そして、信号の高さはどうですか?
—
dmh126 2017年
信号の高さは任意です。たとえば、人間の高さを1,7メートルとすると、その値の地形を(一時的に)上げることができます。私はソースからの距離と高さを割ったウィッヒ角度サイズ使用している私のコード-しかし、それはここでは関係ありませんが、それは私には思える>(?)
—
ゾラン
ベクトル化は間違いなく可能です。FFTはベクトル化できます(jakevdp.github.io/blog/2013/08/28/understanding-the-fft)。しかし、障害物。形状[0]と障害物。形状[1]が何を表すかを理解するのに苦労しています。
—
John Powell