Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果numpy.delete()不起作用,则使用简单用例_Python_Numpy - Fatal编程技术网

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矩阵)