如何从一个不包含某个索引的numpy数组中获取所有值?

Sha*_*han 39 python numpy

我有一个numpy数组,我想要检索除某个索引之外的所有元素.例如,请考虑以下数组

a = [0,1,2,3,4,5,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

如果我指定索引3,那么结果应该是

a = [0,1,2,4,5,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 50

与调整大小一样,从numpy数组中删除元素是一个缓慢的操作(特别是对于大型数组,因为它需要分配空间并将原始数组中的所有数据复制到新数组).如果可能的话应该避免.

通常你可以通过使用蒙面数组来避免它.例如,考虑数组a:

import numpy as np

a = np.array([0,1,2,3,4,5,5,6,7,8,9])
print(a)
print(a.sum())
# [0 1 2 3 4 5 5 6 7 8 9]
# 50
Run Code Online (Sandbox Code Playgroud)

我们可以在索引3处屏蔽它的值,并执行忽略屏蔽元素的求和:

a = np.ma.array(a, mask=False)
a.mask[3] = True
print(a)
print(a.sum())
# [0 1 2 -- 4 5 5 6 7 8 9]
# 47
Run Code Online (Sandbox Code Playgroud)

蒙面阵列除此之外还支持许多操作sum.

如果您确实需要,还可以使用以下compressed方法删除屏蔽元素:

print(a.compressed())
# [0 1 2 4 5 5 6 7 8 9]
Run Code Online (Sandbox Code Playgroud)

但如上所述,尽可能避免使用它.


Jdo*_*dog 17

a_new = np.delete(a, 3, 0)
Run Code Online (Sandbox Code Playgroud)

3这里是您要删除的索引,0是轴(在这种情况下,如果使用1D数组则为零).看到np.delete


Art*_*urJ 10

如果a是一个numpy数组,是一个单行:

>>> a[np.arange(len(a))!=3]
array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)

  • 我发现这在删除屏蔽数组的行时很有用。谢谢! (2认同)

NPE*_*NPE 6

这应该这样做:

In [9]: np.hstack((a[:3], a[4:]))
Out[9]: array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)

如果性能是一个问题,以下将做到这一点:

In [22]: a[3:-1] = a[4:]; a = a[:-1]
Run Code Online (Sandbox Code Playgroud)