从阵列中删除某些元素 numpy 使用条件检查

我想删除来自墓地的一些记录 numpy 大约一百万条记录。

此代码将成为它,但需要很多时间:


a = np.array/[1,45,23,23,1234,3432,-1232,-34,233]/
for element in a:
if element-100/ or element100:
some delete command.


我可以用不同的方式吗?
已邀请:

三叔

赞同来自:

我猜 , 你是什​​么意思
a < -100 or a > -100

, 最短的方法是使用逻辑分度。


a = a[/a >= -100/ & /a <= 100/]


它根本不是 "deleting" 参赛作品,而是创建数组的副本负不需要的值并分配其变量,以前分配给旧数组。 之后,旧阵列没有剩余的链接,并将到垃圾,即它的内存被释放。

值得注意的是,此方法不使用永久性内存,因为我们制作阵列的副本,它使用阵列大小的内存线性。 如果您的阵列如此巨大,这可能是糟糕的,这达到了机器上的内存限制。 实际段落过程和阵列中的每个元素的过程 "到位", 也就是说,使用永久性存储器,它将是一个完全不同的操作,因为阵列中的元素必须必须更改位置并改变存储器块的大小。 我不确定你可以用数组做吗?
numpy

, 但是,你可以做的一件事来避免复制, - 这使用了蒙面阵列
numpy

:


import numpy.ma as ma
mx = ma.masked_array/a, mask = //a < -100/ | /a > 100// /


伪装阵列上的所有操作都会充当我们的项目 "deleted" 不存在,但事实上我们不是 "delete", 它们仍然存在于内存中,只有一个跳过现在与数组关联的项目的条目,我们永远不需要在内存中制作数组的副本。 此外,如果我们想返回我们的远程值,我们只需删除如下所示:


mx.mask = ma.nomask

郭文康

赞同来自:

您可以使用
http://docs.scipy.org/doc/nump ... rrays
逆转条件。


>>> a = np.array/[1,45,23,23,1234,3432,-1232,-34,233]/

>>> a[~//a < -100/ | /a > 100//]
array/[ 1, 45, 23, 23, -34]/

>>> a[/a >= -100/ & /a <= 100/]
array/[ 1, 45, 23, 23, -34]/

>>> a[abs/a/ <= 100]
array/[ 1, 45, 23, 23, -34]/

风见雨下

赞同来自:

In [140]: a = np.array/[1,45,23,23,1234,3432,-1232,-34,233]/

In [141]: b=a[/-100<=a/&/a<=100/]

In [142]: b
Out[142]: array/[ 1, 45, 23, 23, -34]/

要回复问题请先登录注册