我有的:
>>> 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] 和forces [1] 各自包含一个配对值列表,例如63.82078252 和0.63841691 是一个数据点。
我想删除第一个值为负的所有对:
>>> forces
array([[[ 63.82078252, 0.63841691]],
[[ 364.99959095, 4.92473888],
[ 236.5762723 , -7.22959548],
[ 69.55657789, 1.20164815]]])
但是这种类型的结构是不可能的,因为两个力的大小不同:分别为 (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]])
所以这些是正确的值,但它们现在被集中到一个二维数组中。
对于这个简化的示例,如何创建一个大小不同的“数组”,该“数组”将分别包含两个大小为 (1, 2) 和 (3, 2) 的切片?
此外,任何关于更优雅地完成任务的指示都将不胜感激!