首页 > 解决方案 > 如何删除阵列中的镜像对和对?

问题描述

我需要做的是删除阵列中的对和镜像对。我的意思是对于每对计数两次,我想删除对应的行,以及镜像对的行。

例子:

我有矩阵A

A=array([[ 0, 55],
   [ 5, 25],
   [ 5, 25],
   [12, 62],
   [27, 32],
   [25, 73],
   [55,  0],
   [25,  5],
   [62, 12],
   [32, 27],
   [99, 95]])

所以我想要获得的是以下 Matrix B

B = array([ [25, 73],
            [99 ,95])

其中已被删除的对计数两次[5,25]及其镜像对[25,5][0,55]及其镜像对,以及 for[12, 62][27, 32]

标签: pythonarraysnumpy

解决方案


逻辑:
1.主要逻辑是特定索引如何同时满足have same pair和两个条件have minor pair。在这里,我们可以使用vectorize属性Numpy来检查条件和代码:

cond_i = (i == A) | (i[::-1] == A)

2.如果True条件总和完全等于1哪个均值不满足这两个条件,那么这将是我们的要求,对于此条件检查,请使用以下代码:

sum(list((cond_i[:,0] & cond_i[:,1])))

3.最后追加这个条件满足结果。

B.append((A[j]))

代码 :

from numpy import array
import numpy as np
A = array([[0, 55], [5, 25], [5, 25], [12, 62], [27, 32], [25, 73], [55, 0],
           [25, 5], [62, 12], [32, 27], [99, 95]])

B = []
for j, i in enumerate(A):
    if np.sum(np.all(i == A, axis=1) | np.all(i[::-1] == A, axis=1)) == 1:
        B.append((A[j]))

print(np.array(B))

输出 :

[[25 73]
 [99 95]]

推荐阅读