Python 对于包含0和1的Numpy数组,如何删除包含重复行的行?

Python 对于包含0和1的Numpy数组,如何删除包含重复行的行?,python,numpy,keras,duplicates,Python,Numpy,Keras,Duplicates,通常以Keras为例,在训练神经网络时,我们需要创建一个X特征阵列和一个Y目标阵列。Y目标数组应该是一个热编码的数组。例如,X和Y可以是这样的: Y = np.array([[1,0,0],[1,0,0],[0,1,0],[0,1,0],[0,0,1],[0,0,1]]) X = np.array([[3,3,1],[3,3,2],[2,2,2],[2,2,1],[1,1,5],[1,2,4]]) 说,如果你只想用一个唯一的目标来训练示例,那么我们需要在Y中删除重复的行,并相应地移除X中的类似

通常以Keras为例,在训练神经网络时,我们需要创建一个X特征阵列和一个Y目标阵列。Y目标数组应该是一个热编码的数组。例如,X和Y可以是这样的:

Y = np.array([[1,0,0],[1,0,0],[0,1,0],[0,1,0],[0,0,1],[0,0,1]])
X = np.array([[3,3,1],[3,3,2],[2,2,2],[2,2,1],[1,1,5],[1,2,4]])

说,如果你只想用一个唯一的目标来训练示例,那么我们需要在Y中删除重复的行,并相应地移除X中的类似行,因此,你将得到:

Y = np.array([[1,0,0],[0,1,0],[0,0,1]]) 
X = np.array([[3,3,1],[2,2,2],[1,1,5]])

我们如何做到这一点?

应用以下代码:

for i in Y.T:
    index = 0
    is1 = 0
    for j in i:
        if j==1:
            is1+=1
            if is1>1:
                i[index]=2
        index+=1  
应提供:

Y = np.array([[1,0,0],[2,0,0],[0,1,0],[0,2,0],[0,0,1],[0,0,2]])
然后删除Y中具有重复行且与X对应的行就是:

Y = Y[(Y!=2).all(axis=1)]
X = X[(Y!=2).all(axis=1)]
使用
np.unique(*,axis=0,retrun\u index=True)

_, ix = np.unique(Y, axis = 0, return_index = True)

X[ix[::-1]]  # for your requested order
Out[]: 
array([[3, 3, 1],
       [2, 2, 2],
       [1, 1, 5]])

Y[ix[::-1]]
Out[]: 
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])