高效去除numpy数组中的None值的方法

32 投票
2 回答
37841 浏览
提问于 2025-04-18 16:55

有没有一种有效的方法可以从numpy数组中去掉None,并且调整数组的大小呢?

比如说,怎么能在不逐个检查的情况下,把这个框架中的None去掉呢?我当然可以逐个检查,但我正在处理一个可能会被多次调用的api。

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

2 个回答

5

我用下面这个方法,觉得比大家认可的答案简单一些:

a = a[a != None]

需要注意的是:PEP8(Python的编码规范)警告说,不要用等号去比较像None这样的单例。我在发这个答案的时候并不知道这一点。不过,对于numpy数组,我觉得这个方法太符合Python的风格,而且看起来也很漂亮,所以我还是会用。可以看看评论里的讨论。

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

以这种方式选择数组中的元素,叫做 布尔数组索引

撰写回答