Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare two numpy arrays and add missing values to the other with a tweak

I have two numpy arrays of different dimension. I want to add those additional elements of the bigger array to the smaller array, only the 0th element and the 1st element should be given as 0.

For example :

a = [ [2,4],[4,5], [8,9],[7,5]]

b = [ [2,5], [4,6]]

After adding the missing elements to b, b would become as follows :

b [ [2,5], [4,6], [8,0], [7,0] ]

I have tried the logic up to some extent, however some values are getting redundantly added as I am not able to check whether that element has already been added to b or not.

Secondly, I am doing it with the help of an additional array c which is the copy of b and then doing the desired operations to c. If somebody can show me how to do it without the third array c , would be very helpful.

import numpy as np

a = [[2,3],[4,5],[6,8], [9,6]]

b = [[2,3],[4,5]]

a = np.array(a)
b = np.array(b)
c = np.array(b)

for i in range(len(b)):
    for j in range(len(a)):
        if a[j,0] == b[i,0]:
            print "matched "
        else:
            print "not matched"
            c= np.insert(c, len(c), [a[j,0], 0], axis = 0)
print c
like image 991
H.Burns Avatar asked Nov 18 '25 07:11

H.Burns


1 Answers

#####For explanation#####
#basic set operation to get the missing elements 
c = set([i[0] for i in a]) - set([i[0] for i in b])
#c will just store the missing elements....
#then just append the elements 
for i in c:
    b.append([i, 0])

Output -

[[2, 5], [4, 6], [8, 0], [7, 0]]

Edit -

But as they are numpy arrays you can just do this (and without using c as an intermediate) - just two lines

for i in set(a[:, 0]) - (set(b[:, 0])):
    b = np.append(b, [[i, 0]], axis = 0)

Output -

array([[2, 5],
       [4, 6],
       [8, 0],
       [7, 0]])
like image 102
hashcode55 Avatar answered Nov 19 '25 19:11

hashcode55