有没有一种有效的方法可以从numpy数组中删除None值,并将数组调整为其新的大小?
例如,如何在不使用python迭代的情况下从此框架中删除None值。我可以轻松地遍历它,但正在开发一个可能被多次调用的API调用。
a = np.array([1,45,23,23,1234,3432,-1232,-34,233,None])
有没有一种有效的方法可以从numpy数组中删除None值,并将数组调整为其新的大小?
例如,如何在不使用python迭代的情况下从此框架中删除None值。我可以轻松地遍历它,但正在开发一个可能被多次调用的API调用。
a = np.array([1,45,23,23,1234,3432,-1232,-34,233,None])
In [17]: a[a != np.array(None)]
Out[17]: array([1, 45, 23, 23, 1234, 3432, -1232, -34, 233], dtype=object)
上述方法之所以有效,是因为 a != np.array(None)
是一个布尔数组,用于映射非 None 值:In [20]: a != np.array(None)
Out[20]: array([ True, True, True, True, True, True, True, True, True, False], dtype=bool)
以这种方式选择数组元素被称为布尔数组索引。
我使用以下方法,我觉得比被接受的答案更简单:
a = a[a != None]
None
)一起使用。当我发布这个答案时,我不知道这一点。话虽如此,对于NumPy数组,我发现这太具有Python特色和美观以至于不能不使用。请参见评论中的讨论。a[a != None]
转换为a[a is not None]
(这在语义上并不等价)。 - David Slater!=
的规定,至少我没有看到。需要考虑的是:有时候使用 is
是合适的,而有时候则需要使用 ==
。同样地,有时候你需要使用 !=
,而有时候则需要使用 is not
。你只需要知道自己在做什么。请注意,这个问题/答案与 numpy 数组有关 -- 对于 Python 列表,你需要另外考虑。 - erica = a [a is not None]
,这导致了一些奇怪的错误。感谢提供链接 - 很好的讨论! - David Slater