如何按值删除二维 NumPy 数组中的特定数组?

How to delete particular array in 2 dimensional NumPy array by value?

设二维数组如下:

In [1]: a = [[1, 2], [3, 4], [5, 6], [1, 2], [7, 8]]
        a = np.array(a)
        a, type(a)
Out [1]: (array([[1, 2],
                 [3, 4],
                 [5, 6],
                 [1, 2],
                 [7, 8]]),
         numpy.ndarray)

我试过这个程序:

In [2]: a = a[a != [1, 2])
        a = np.reshape(a, (int(a.size/2), 2) # I have to do this since on the first line in In [2] change the dimension to 1 [3, 4, 5, 6, 7, 8] (the initial array is 2-dimensional array)
        a
Out[2]: array([[3, 4],
               [5, 6],
               [7, 8]])

我的问题是,NumPy 中是否有任何函数可以直接执行此操作?


更新问题

这是我一直在研究的半完整源代码

from sklearn import datasets
data = datasets.load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['Target'] = pd.DataFrame(data.target)

bucket = df[df['Target'] == 0]
bucket = bucket.iloc[:,[0,1]].values
lp, rp = leftestRightest(bucket)
bucket = np.array([x for x in bucket if list(x) != lp])
bucket = np.array([x for x in bucket if list(x) != rp])

备注:

leftestRightest(arg) 是 returns 2 个大小为 2 的一维 NumPy 数组(即 lprp)的函数。例如,lp = [1, 3]rp = [2, 4],参数为二维 NumPy 数组

应该有一个更微妙的方法,但这里是我想出的:

np.array([x for x in a if list(x) != [1,2]])

输出

[[3, 4], [5, 6], [7, 8]]

请注意,我不建议在大型数组中使用列表理解,因为它会非常 time-consuming。

您的方法是正确的,但掩码需要 single-dimensional:

a[(a != [1, 2]).all(-1)]

输出:

array([[3, 4],
       [5, 6],
       [7, 8]])

或者,您可以收集元素并使用 -1 推断维度:[​​=13=]

a[a != [1, 2]].reshape(-1, 2)

布尔条件创建 True/False 的二维数组。您必须对列应用 and 操作以确保匹配不是部分匹配。考虑上面数组中的一行 [5,2],您编写的脚本将在生成的一维数组中添加 5 并忽略 2。可以这样操作:

a[np.all(a != [1, 2],axis=1)]