从numpy数组列表中提取具有0元素的行?



这里是一堆点,我想只提取0为第一个元素或列值为0的行。这是列表的输出片段。

array([[ 29.42787794, 453.        , 496.        ],
[  **0.**        , **424.        , 491.**        ],
[ 34.66987165, 453.        , 472.        ],
[ 26.        , 414.        , 467.        ],
[ 48.27007354, 393.        , 454.        ],
[ 51.4781507 , 417.        , 440.        ]]),
array([[ 24.        , 453.        , 496.        ],
[ 34.66987165, 424.        , 491.        ],
[  **0.**        , **453.        , 472.**        ],
[ 39.3192065 , 414.        , 467.        ],
[ 28.        , 453.        , 444.        ],
[ 48.16637832, 417.        , 440.        ],
[ 48.70318265, 469.        , 426.        ]]),
array([[ 48.60041152, 453.        , 496.        ],
[ 26.        , 424.        , 491.        ],
[ 39.3192065 , 453.        , 472.        ],
[  **0.        , **414.        , 467.****        ],
[ 24.69817807, 393.        , 454.        ],
[ 45.27692569, 453.        , 444.        ],
[ 27.16615541, 417.        , 440.        ],
[ 42.19004622, 392.        , 431.        ],
[ 51.623638  , 433.        , 419.        ]])

所以我想从这个数组列表中提取粗体点。我不确定怎么做。我试过numpy。在那里,np。在将数组添加到列表之前,任何操作都可以,但似乎都不起作用。接下来,我想知道是否可以使用一个列表来获得粗体点。len(list)是将数组加在一起的数字。所以我有点困惑,我怎么能去检索奇异点从单独的数组在一个列表。

你的意思是:

>>> arr = np.vstack(arr)
>>> arr[arr[:, 0] == 0]
array([[  0., 424., 491.],
[  0., 453., 472.],
[  0., 414., 467.]])
>>> 

或者试试np.isclose:

>>> arr = np.vstack(arr)
>>> arr[np.isclose(0, arr[:, 0])]
array([[  0., 424., 491.],
[  0., 453., 472.],
[  0., 414., 467.]])
>>> 

一种方法是使用np.isclose来检测第一个元素接近于零的行:

res = [arr[np.isclose(0, arr[: ,0])] for arr in lst]
print(res)

[array([[  0., 424., 491.]]), array([[  0., 453., 472.]]), array([[  0., 414., 467.]])]