你试过删除列表吗?
In [84]: a = [[1, 2, 3, 4], [1, 2, 3, 5], [2, 5, 4, 3], [5, 2, 3, 1]]
In [85]: a
Out[85]: [[1, 2, 3, 4], [1, 2, 3, 5], [2, 5, 4, 3], [5, 2, 3, 1]]
In [86]: rem = [1,2,3,5]
In [87]: a.remove(rem)
In [88]: a
Out[88]: [[1, 2, 3, 4], [2, 5, 4, 3], [5, 2, 3, 1]]
remove 匹配值。
np.delete 使用索引,而不是值。它还返回一个副本;它没有采取适当的行动。结果是一个数组,而不是嵌套列表(np.delete 将输入转换为数组,然后再对其进行操作)。
In [92]: a = [[1, 2, 3, 4], [1, 2, 3, 5], [2, 5, 4, 3], [5, 2, 3, 1]]
In [93]: a1=np.delete(a,1, axis=0)
In [94]: a1
Out[94]:
array([[1, 2, 3, 4],
[2, 5, 4, 3],
[5, 2, 3, 1]])
这更像是列表pop:
In [96]: a = [[1, 2, 3, 4], [1, 2, 3, 5], [2, 5, 4, 3], [5, 2, 3, 1]]
In [97]: a.pop(1)
Out[97]: [1, 2, 3, 5]
In [98]: a
Out[98]: [[1, 2, 3, 4], [2, 5, 4, 3], [5, 2, 3, 1]]
到delete 按值,您需要首先找到所需行的索引。使用整数数组并不难。使用浮点数会更棘手。
=========
但你不需要在 numpy 中使用delete 来执行此操作;布尔索引有效:
In [119]: a = [[1, 2, 3, 4], [1, 2, 3, 5], [2, 5, 4, 3], [5, 2, 3, 1]]
In [120]: A = np.array(a) # got to work with array, not list
In [121]: rem=np.array([1,2,3,5])
简单对比; rem 被广播以匹配行
In [122]: A==rem
Out[122]:
array([[ True, True, True, False],
[ True, True, True, True],
[False, False, False, False],
[False, True, True, False]], dtype=bool)
找到所有元素匹配的行 - 这是我们要删除的行
In [123]: (A==rem).all(axis=1)
Out[123]: array([False, True, False, False], dtype=bool)
只需not 它,并用它来索引A:
In [124]: A[~(A==rem).all(axis=1),:]
Out[124]:
array([[1, 2, 3, 4],
[2, 5, 4, 3],
[5, 2, 3, 1]])
(原A不变)。
np.where 可用于将布尔值(或其倒数)转换为索引。有时这很方便,但通常不是必需的。