Numpy array is much slower than list

Viewed 1450

Given two matrices X1 (N,3136) and X2 (M,3136) (where every element in every row is an binary number) i am trying to calculate hamming distance so that each element in X1 is compared to all of the rows from X2, such that result matrix is (N,M).

I have written two function for it (first one with help of numpy and the other one without numpy):

def hamming_distance(X, X_train):
    array = np.array([np.sum(np.logical_xor(x, X_train), axis=1) for x in X])

    return array



def hamming_distance2(X, X_train):
    a = len(X[:,0])
    b = len(X_train[:,0])

    hamming_distance = np.zeros(shape=(a, b))

    for i in range(0, a):
        for j in range(0, b):
            hamming_distance[i,j] = np.count_nonzero(X[i,:] != X_train[j,:])

    return hamming_distance

My problem is that upper function is much slower than lower one where I use two for loops. Is it possible to improve on first function so that I use only one loop?

PS. Sorry for my english, it isn't my first language, although I was trying to do my best!

2 Answers
Related