如何从NumPy数组中获取除某个索引外的所有值?

59 投票
5 回答
86947 浏览
提问于 2025-04-17 02:21

我有一个NumPy数组,我想获取除了某个特定索引以外的所有元素。比如,考虑下面这个数组:

a = [0,1,2,3,4,5,5,6,7,8,9]

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

a = [0,1,2,4,5,5,6,7,8,9]

5 个回答

18

如果a是一个NumPy数组,这里有一个一行代码的写法:

>>> a[np.arange(len(a))!=3]
array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
30
a_new = np.delete(a, 3, 0)

这里的3是你想要删除的索引,而0是轴(在使用一维数组时,这里是零)。你可以查看np.delete的文档了解更多信息。

73

像调整大小一样,从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

我们可以在索引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

掩码数组还支持许多其他操作,除了sum以外。

如果你真的需要,也可以使用compressed方法来删除掩码元素:

print(a.compressed())
# [0 1 2 4 5 5 6 7 8 9]

但如上所述,如果可以的话,还是尽量避免这样做。

撰写回答