Python 如果numpy.delete()不起作用,则使用简单用例
下面是一些代码:Python 如果numpy.delete()不起作用,则使用简单用例,python,numpy,Python,Numpy,下面是一些代码: c = np.delete(a,b) print(len(a)) print(a) print(len(b)) print(b) print(len(c)) print(c) 它还给我们: 24 [32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55] 20 [46, 35, 37, 54, 40, 49, 34, 48, 50, 38, 42, 47, 33, 52, 41, 36,
c = np.delete(a,b)
print(len(a))
print(a)
print(len(b))
print(b)
print(len(c))
print(c)
它还给我们:
24
[32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55]
20
[46, 35, 37, 54, 40, 49, 34, 48, 50, 38, 42, 47, 33, 52, 41, 36, 39, 44, 55,
51]
24
[32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55]
如您所见,b的所有元素都出现在a中,但不会被删除。不知道为什么。有什么想法吗?多谢各位 不会删除b
中包含的元素,它会删除a[b]
,换句话说,b
需要包含要删除的索引。由于b
只包含大于a
长度的值,因此不会删除任何值。当前的越界索引被忽略,但这在将来将不会发生:
/usr/local/bin/ipython3:1: DeprecationWarning: in the future out of bounds indices will raise an error instead of being ignored by `numpy.delete`.
#!/usr/bin/python3
纯Python解决方案是使用set
:
set_b = set(b)
c = np.array([x for x in a if x not in set_b])
# array([32, 43, 45, 51, 53])
并使用numpy
广播创建掩码,以确定要删除的值:
c = a[~(a[None,:] == b[:, None]).any(axis=0)]
# array([32, 43, 45, 51, 53])
它们的速度与给定示例大致相同,但numpy方法需要更多内存(因为它生成一个包含a
和b
所有组合的2D矩阵)