我有一个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]
答案 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])