从numpy数组中删除None的有效方法

Mic*_* WS 13 python numpy

有没有一种有效的方法从numpy数组中删除Nones并将数组调整为新的大小?

例如,如果不在python中迭代它,你将如何从这个帧中删除None.我可以轻松地遍历它,但正在进行一次可能被多次调用的api调用.

a = np.array([1,45,23,23,1234,3432,-1232,-34,233,None])
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 25

In [17]: a[a != np.array(None)]
Out[17]: array([1, 45, 23, 23, 1234, 3432, -1232, -34, 233], dtype=object)
Run Code Online (Sandbox Code Playgroud)

上面的工作原因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)
Run Code Online (Sandbox Code Playgroud)

以这种方式选择数组的元素称为布尔数组索引.

  • 这样可以节省80%的大阵列时间 (2认同)
  • 但这大部分将存在于C中。它比filter快得多 (2认同)

eri*_*ric 5

我使用以下内容,我发现它比接受的答案更简单:

a = a[a != None]
Run Code Online (Sandbox Code Playgroud)

警告:PEP8 警告不要对单例使用相等运算符,例如None. 当我发布这个答案时我并不知道这一点。也就是说,对于 numpy 数组,我发现这太 Pythonic 了,而且很值得不使用。请参阅评论中的讨论。

  • 你的答案是我过去一直这样做的......直到我们开始在我们的存储库中使用 flake8 (和 autopep8) - 这导致代码更改(有时自动)为 `a = a[a is not None]` ,从而导致在一些奇怪的错误中。感谢您的链接 - 很好的讨论! (2认同)