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

时间:2011-09-15 10:05:01

标签: python 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 个答案:

答案 0 :(得分:48)

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

通常,您可以通过使用masked array来避免它。例如,考虑数组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之外,屏蔽数组还支持many operations

如果确实需要,也可以使用compressed方法删除蒙版元素:

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

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

答案 1 :(得分:15)

a_new = np.delete(a, 3, 0)

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

答案 2 :(得分:8)

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

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

答案 3 :(得分:5)

这应该这样做:

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

如果性能问题,以下内容将会实现:

In [22]: a[3:-1] = a[4:]; a = a[:-1]

答案 4 :(得分:0)

另一个解决方案是使用numpy的连接函数

>>> x = np.arange(0,10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> i = 3 
>>> np.concatenate((x[:i],x[(i+1):]))
array([0, 1, 2, 4, 5, 6, 7, 8, 9])