添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

26 人关注

有没有一种有效的方法可以从numpy数组中移除Nones,并将数组的大小调整到新的大小?

例如,你如何在不通过python迭代的情况下删除这个框架中的None。 我可以很容易地对它进行迭代,但我正在研究一个可能会被调用很多次的api调用。

a = np.array([1,45,23,23,1234,3432,-1232,-34,233,None])
    
5 个评论
你想把 "无 "替换成什么?还是你想把 "无 "移走,然后调整数组的大小?
我想删除Nones并调整阵列的大小。
!=的效率要远远高于过滤器
另外,你不能像前面的例子那样做!"=无"。
python
numpy
Michael WS
Michael WS
发布于 2014-08-12
2 个回答
John1024
John1024
发布于 2019-11-23
已采纳
0 人赞同
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)是一个布尔数组,它映射出非无的值。

In [20]: a != np.array(None)
Out[20]: array([ True,  True,  True,  True,  True,  True,  True,  True,  True, False], dtype=bool)

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

如果你不介意我问,如果数组中有n个项目,这个方法是否比O(n)快?
这为我在一个大型阵列上节省了80%的时间。
@wookie919 如果我对numpy的内部结构理解正确的话,这就是把数组复制出来,然后逐一删除None的。所以,我不认为是这样。
但大部分都将在C语言中运行,它比过滤器快得多。
在访问(索引)运算符里面使用比较,是否有一个名称?像访问器中的冒号就叫分片。
eric
eric
发布于 2019-11-23
0 人赞同

我使用下面的方法,我觉得比公认的答案更简单。