How to delete rows from a matrix that equals entries from another matrix?

I have two matrices. I want to delete rows from Matrix 1 that equals Matrix 2.

Matrix 1:
[[ 2.00000000e+00  0.00000000e+00]
 [ 1.84775907e+00  7.65366865e-01]
 [ 1.41421356e+00  1.41421356e+00]
 [ 7.65366865e-01  1.84775907e+00]
 [ 1.22464680e-16  2.00000000e+00]
 [-7.65366865e-01  1.84775907e+00]
 [-1.41421356e+00  1.41421356e+00]
 [-1.84775907e+00  7.65366865e-01]
 [-2.00000000e+00  2.44929360e-16]
 [-1.84775907e+00 -7.65366865e-01]
 [-1.41421356e+00 -1.41421356e+00]
 [-7.65366865e-01 -1.84775907e+00]
 [-3.67394040e-16 -2.00000000e+00]
 [ 7.65366865e-01 -1.84775907e+00]
 [ 1.41421356e+00 -1.41421356e+00]
 [ 1.84775907e+00 -7.65366865e-01]
 [ 7.07106781e-01  7.07106781e-01]
 [ 1.00000000e+00  0.00000000e+00]
 [ 7.07106781e-01 -7.07106781e-01]
 [-1.83697020e-16 -1.00000000e+00]
 [-7.07106781e-01 -7.07106781e-01]
 [-1.00000000e+00  1.22464680e-16]
 [-7.07106781e-01  7.07106781e-01]
 [ 6.12323400e-17  1.00000000e+00]
 [ 1.28779197e+00 -5.33420900e-01]
 [ 2.98368551e-01 -1.50000000e+00]
 [-2.98368551e-01 -1.50000000e+00]
 [-2.98368551e-01  1.50000000e+00]
 [-8.49681746e-01  1.27163860e+00]
 [-1.28779197e+00  5.33420900e-01]
 [-1.27163860e+00 -8.49681746e-01]
 [-1.50000000e+00 -2.98368551e-01]
 [ 5.33420900e-01  1.28779197e+00]
 [ 1.28779197e+00  5.33420900e-01]
 [-8.30681297e-01 -1.27260907e+00]
 [ 8.30681297e-01 -1.27260907e+00]
 [ 1.50000000e+00  7.45847266e-02]
 [ 1.00792081e+00  1.11339954e+00]
 [-3.53553391e-01  8.53553391e-01]
 [-8.53553391e-01 -3.53553391e-01]
 [ 1.20712467e+00 -9.94468287e-01]
 [ 1.92387953e+00 -3.82683432e-01]
 [-1.63098631e+00  1.08979021e+00]
 [ 1.63098631e+00  1.08979021e+00]
 [ 1.61133220e-01  1.56482204e+00]
 [-1.56482204e+00  1.61133220e-01]
 [ 3.53553391e-01 -8.53553391e-01]
 [-3.53553391e-01 -8.53553391e-01]
 [-1.08471235e+00  9.12010725e-01]] 49

Matrix 2:

[[ 2.00000000e+00  0.00000000e+00]
 [ 1.84775907e+00  7.65366865e-01]
 [ 1.92387953e+00 -3.82683432e-01]
 [ 1.63098631e+00  1.08979021e+00]
 [ 1.41421356e+00  1.41421356e+00]
 [ 7.65366865e-01  1.84775907e+00]
 [ 1.22464680e-16  2.00000000e+00]
 [-7.65366865e-01  1.84775907e+00]
 [-1.41421356e+00  1.41421356e+00]
 [-1.63098631e+00  1.08979021e+00]
 [-1.84775907e+00  7.65366865e-01]
 [-2.00000000e+00  2.44929360e-16]
 [-1.84775907e+00 -7.65366865e-01]
 [-1.41421356e+00 -1.41421356e+00]
 [-7.65366865e-01 -1.84775907e+00]
 [-3.67394040e-16 -2.00000000e+00]
 [ 7.65366865e-01 -1.84775907e+00]
 [ 1.41421356e+00 -1.41421356e+00]
 [ 1.84775907e+00 -7.65366865e-01]
 [ 7.07106781e-01  7.07106781e-01]
 [ 1.00000000e+00  0.00000000e+00]
 [ 6.12323400e-17  1.00000000e+00]
 [ 7.07106781e-01 -7.07106781e-01]
 [ 3.53553391e-01 -8.53553391e-01]
 [-1.83697020e-16 -1.00000000e+00]
 [-3.53553391e-01 -8.53553391e-01]
 [-7.07106781e-01 -7.07106781e-01]
 [-8.53553391e-01 -3.53553391e-01]
 [-1.00000000e+00  1.22464680e-16]
 [-7.07106781e-01  7.07106781e-01]
 [-3.53553391e-01  8.53553391e-01]] 31

I tried different numpy functions but nothing works. For example,
numpy.delete or numpy.pop don’t work. I want to delete from Matrix 1
the elements that equal entries from Matrix 2. I am not sure how to do
this.

Assuming your matrices are numpy arrays, you’ll notice that the result of matrix1 == matrix2 is another array of element-wise results. You can call .all(1) on that to turn it into rowwise results, which means the rows of matrix1 that are equal rowwise to matrix2 are matrix1[(matrix1 == matrix2).all(1)].
This is rows you want to lose, which means the rows you want to keep must be:

updated_matrix1 = matrix1[~(matrix1 == matrix2).all(1)]
1 Like

Hi @lvc ,

Thanks for the reply and the suggestion. That’s a smart code. I came up with another solution which is not that elegant. Here is what I came up with:

indices = []
indexlist = np.array(indices)

for i in range(0,len(matrix1[0])):
  for j in range(0,len(matrix2[0])):

    if matrix1()[i][0]==matrix2()[j][0] and matrix1()[i][1]==matrix2()[j][1]:
      
      indexlist = np.append(indexlist,i)

matrix3=np.delete(matrix1, [indexlist[:]], 0)

But your solution is much more elegant.