删除3D numpy数组中包含负值的“行”

2024-09-28 21:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的:

>>> 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]]])

力[0]和力[1]都包含成对值的列表,例如63.82078252和0.63841691是一个数据点。在

我要删除第一个值为负的所有对:

^{pr2}$

但是这种结构是不可能的,因为两个力片的大小不同:(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)的切片?在

另外,任何关于更优雅地完成任务的建议都将不胜感激!在


Tags: 数据列表npany条目数组nan结构