如何从NumPy数组中获取除某个索引外的所有值?
我有一个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]
但如上所述,如果可以的话,还是尽量避免这样做。