Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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数组中删除元素_Python_Numpy_Multidimensional Array_Numpy Ndarray - Fatal编程技术网

Python 如何在不知道元素位置的情况下从二维Numpy数组中删除元素

Python 如何在不知道元素位置的情况下从二维Numpy数组中删除元素,python,numpy,multidimensional-array,numpy-ndarray,Python,Numpy,Multidimensional Array,Numpy Ndarray,我有一个二维阵列: [[0,0],[0,1],[1,0],[1,1]] 我想删除[0,1]元素,而不知道它在数组中的位置(因为元素可能会被洗牌) 结果应该是: [[0,0],[1,0],[1,1]] 我尝试过使用numpy.delete,但一直得到一个平坦的数组: >>> arr = np.array([[0,0], [0,1], [1,0], [1,1]]) >>> arr array([[0, 0], [0, 1], [1, 0

我有一个二维阵列:
[[0,0],[0,1],[1,0],[1,1]]

我想删除
[0,1]
元素,而不知道它在数组中的位置(因为元素可能会被洗牌)

结果应该是:
[[0,0],[1,0],[1,1]]

我尝试过使用
numpy.delete
,但一直得到一个平坦的数组:

>>> arr = np.array([[0,0], [0,1], [1,0], [1,1]])
>>> arr
array([[0, 0],
       [0, 1],
       [1, 0],
       [1, 1]])
>>> np.delete(arr, [0,1])
array([0, 1, 1, 0, 1, 1])
指定轴将删除
0,1
元素,而不是搜索元素(这很有意义):

而试图找到位置(正如所建议的那样)似乎同样存在问题:

>>> np.where(arr==[0,1])
(array([0, 1, 1, 3]), array([0, 0, 1, 1]))

(这3个是从哪里来的?!?

来自文档:

numpy.delete(arr,obj,axis=None)

轴:int,可选

要沿其删除由obj定义的子阵列的轴。如果轴 如果为“无”,则obj将应用于展平阵列

如果不指定轴(即无),它将自动展平阵列;您只需要指定axis参数,在您的情况下
np.delete(arr[0,1],axis=0)

然而,就像上面的例子一样,[0,1]是一个索引列表;您必须提供索引/位置(例如,您可以使用
np.where(条件、数组)
来实现)

这里有一个工作示例:

    my_array = np.array([[0, 1],
                         [1, 0],
                         [1, 1],
                         [0, 0]])

    row_index, = np.where(np.all(my_array == [0, 1], axis=1))
    my_array = np.delete(my_array, row_index,axis=0)
    print(my_array)

    #Output is below

        [[1 0]
         [1 1]
         [0 0]]

从文件中:

numpy.delete(arr,obj,axis=None)

轴:int,可选

要沿其删除由obj定义的子阵列的轴。如果轴 如果为“无”,则obj将应用于展平阵列

如果不指定轴(即无),它将自动展平阵列;您只需要指定axis参数,在您的情况下
np.delete(arr[0,1],axis=0)

然而,就像上面的例子一样,[0,1]是一个索引列表;您必须提供索引/位置(例如,您可以使用
np.where(条件、数组)
来实现)

这里有一个工作示例:

    my_array = np.array([[0, 1],
                         [1, 0],
                         [1, 1],
                         [0, 0]])

    row_index, = np.where(np.all(my_array == [0, 1], axis=1))
    my_array = np.delete(my_array, row_index,axis=0)
    print(my_array)

    #Output is below

        [[1 0]
         [1 1]
         [0 0]]

在这里,我们找到与候选行匹配的所有行
[0,1]

>>> (arr == [0, 1]).all(axis=1)
array([False,  True, False, False])
>>> arr[~(arr == [0, 1]).all(axis=1)]
array([[0, 0],
       [1, 0],
       [1, 1]])
或者,与候选行不匹配的行

>>> ~(arr == [0, 1]).all(axis=1)
array([ True, False,  True,  True])
因此,要选择所有不匹配的行
[0,1]

>>> (arr == [0, 1]).all(axis=1)
array([False,  True, False, False])
>>> arr[~(arr == [0, 1]).all(axis=1)]
array([[0, 0],
       [1, 0],
       [1, 1]])

请注意,这将创建一个新的数组。

这里我们找到与候选
[0,1]
匹配的所有行

>>> (arr == [0, 1]).all(axis=1)
array([False,  True, False, False])
>>> arr[~(arr == [0, 1]).all(axis=1)]
array([[0, 0],
       [1, 0],
       [1, 1]])
mask = (arr==np.array([0,1])).all(axis=1)
arr1 = arr[~mask,:]
或者,与候选行不匹配的行

>>> ~(arr == [0, 1]).all(axis=1)
array([ True, False,  True,  True])
因此,要选择所有不匹配的行
[0,1]

>>> (arr == [0, 1]).all(axis=1)
array([False,  True, False, False])
>>> arr[~(arr == [0, 1]).all(axis=1)]
array([[0, 0],
       [1, 0],
       [1, 1]])
请注意,这将创建一个新的
数组

mask = (arr==np.array([0,1])).all(axis=1)
arr1 = arr[~mask,:]
查看
遮罩
。。它应该是[假,真,…]


查看
遮罩
。。它应该是[假,真,…]

首先必须确定位置。首先必须确定位置。这似乎会删除0&1元素;我最终得到了
数组([[1,0],[1,1]])
是的,它就是这样工作的。不幸的是,您需要指定索引。一种方法是使用np.where获取数组的索引并仅删除这些索引。那么如何使用
np.where
查找单个元素呢<代码>>>np.where(arr==[0,1])返回
(数组([0,1,1,3])、数组([0,0,1,1]))
——甚至不知道3是如何进入的。但我尝试了多次排列,但都没有结果。您面临的问题是,多维数组上的np.where()返回行索引和列索引,而不是满足条件的元组(x,y)。我更新了示例,这样您就可以看到一个工作示例。它似乎删除了0&1元素;我最终得到了
数组([[1,0],[1,1]])
是的,它就是这样工作的。不幸的是,您需要指定索引。一种方法是使用np.where获取数组的索引并仅删除这些索引。那么如何使用
np.where
查找单个元素呢<代码>>>np.where(arr==[0,1])返回
(数组([0,1,1,3])、数组([0,0,1,1]))
——甚至不知道3是如何进入的。但我尝试了多次排列,但都没有结果。您面临的问题是,多维数组上的np.where()返回行索引和列索引,而不是满足条件的元组(x,y)。我更新了示例,以便您看到一个工作示例。