Python 对于包含0和1的Numpy数组,如何删除包含重复行的行?
通常以Keras为例,在训练神经网络时,我们需要创建一个X特征阵列和一个Y目标阵列。Y目标数组应该是一个热编码的数组。例如,X和Y可以是这样的: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中的类似
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]])