私が持っているもの:
>>> forces
array([[[ 63.82078252, 0.63841691],
[ -62.45826693, 7.11946976],
[ -87.85946925, 15.1988562 ],
[-120.49417797, -16.31785819],
[ -81.36080338, 6.45074645]],
[[ 364.99959095, 4.92473888],
[ 236.5762723 , -7.22959548],
[ 69.55657789, 1.20164815],
[ -22.1684177 , 13.42611095],
[ -91.19739147, -16.15076634]]])
force[0] と force [1] にはそれぞれペアの値のリストが含まれます。たとえば、63.82078252 & 0.63841691 は 1 つのデータ ポイントです。
最初の値が負のすべてのペアを削除したい:
>>> forces
array([[[ 63.82078252, 0.63841691]],
[[ 364.99959095, 4.92473888],
[ 236.5762723 , -7.22959548],
[ 69.55657789, 1.20164815]]])
しかし、このタイプの構造は、力の 2 つのスライスが異なるサイズ (それぞれ (1, 2) と (3, 2)) であるため、不可能です。
私のずさんな試み:
>>> forces[:,:,0][forces[:,:,0] < 0] = np.nan
>>> forces
array([[[ 63.82078252, 0.63841691],
[ nan, 7.11946976],
[ nan, 15.1988562 ],
[ nan, -16.31785819],
[ nan, 6.45074645]],
[[ 364.99959095, 4.92473888],
[ 236.5762723 , -7.22959548],
[ 69.55657789, 1.20164815],
[ nan, 13.42611095],
[ nan, -16.15076634]]])
次にisnan
、関連するエントリを削除するために使用します。
>>> forces = forces[~np.isnan(forces).any(axis=2)]
>>> forces
array([[ 63.82078252, 0.63841691],
[ 364.99959095, 4.92473888],
[ 236.5762723 , -7.22959548],
[ 69.55657789, 1.20164815]])
したがって、これらは正しい値ですが、2D 配列にまとめられています。
この単純化された例では、サイズが (1, 2) と (3, 2) の 2 つのスライスをそれぞれ含む異種サイズの「配列」を作成するにはどうすればよいですか?
また、タスクをよりエレガントに達成するための指針をいただければ幸いです。