2

異なる時間ステップでスパーの変形を追跡するために、ライン コレクションを構築しようとしています。次の定義を使用して、単一の時間ステップの線を正しく描くことができました。

lstLines = [((xb, yb, zb), (xe, ye, ze)) for (xb, xe, yb, ye, zb, ze) in \
           zip(Spar_Res[i,:-1,0], Spar_Res[i,1:,0], Spar_Res[i,:-1,1], Spar_Res[i,1:,1],Spar_Res[i,:-1,2],Spar_Res[i,1:,2]) for i in range(Spar_Res.shape[0])]

ここで、(x,y,z) のインデックス b と e は、セグメントの開始と終了を表します。Spar_Res は、0 軸に時間、1 軸にスパーの頂点、( x、y、z) 2 軸上の座標。時間の経過とともに追加のループを追加することを望んでいましたが、ここではインデックス i がトリックを実行しますが、ループを置き忘れたか、何らかの形で間違っていると思います。

時間に沿って反復することにより、ラインコレクションを適切に構築する方法について何か考えはありますか?

4

1 に答える 1

1

あなたが何をしようとしているのかわかりませんが、連結と再形成を使用して、上記のものに近いものをより明確な形式で書きました。データをそのように考えると、作業がはるかに簡単になると思います。以下の T は時点の数、V は頂点の数です。

# This takes your data and creates a new array that is (T, V-1, 2, 3)
lstLines = np.concatenate((Spar_Res[:, :-1, None, :],
                           Spar_Res[:,  1:, None, :]), axis=2)
# This reshapes the array to be (T * (V - 1), 2, 3)
lstLines = lstLines.reshape(-1, 2, 3)

上記のコードは次と同等です。

lstLines = [((xb, yb, zb), (xe, ye, ze)) for i in range(Spar_Res.shape[0])
            for (xb, xe, yb, ye, zb, ze) in zip(Spar_Res[i,:-1,0], Spar_Res[i,1:,0],
                                                Spar_Res[i,:-1,1], Spar_Res[i,1:,1],
                                                Spar_Res[i,:-1,2], Spar_Res[i,1:,2]) 
           ]
lstLines = np.array(lstLines)
于 2013-10-29T22:17:40.660 に答える