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)。我更新了示例,以便您看到一个工作示例。