эффективный алгоритм вместо зацикливания

У меня есть набор данных, где каждый образец имеет структуру, похожую на эту

X=[ [[],[],[],[]], [[],[]] , [[],[],[]] ,[[][]]]

например:

X=np.array([ [ [1,2,3], [2,4,5] ,[2,3,4] ] , [ [5,6], [6,6] ] , [[2,3,1],[2,3,10],[23,1,2],[1,4,5]]  ] ,"object")

Y=np.array([ [ [12,14,15] ,[12,13,14] ] , [ [15,16], [16,16] ] , [[22,23,21],[32,33,11],[12,44,55]]  ] ,"object")

Таким образом, длякаждый образец Мне нужно вычислить скалярное произведение между каждым элементом x с соответствующим элементом y того же индекса и суммировать результат. то есть:

result=0

for i in range(3):
    for n,m in itertools.product(X[i],Y[i]):
        print "%s, %s" % (n,m)
        result+=np.dot(n,m)

   .....:         
[1, 2, 3], [12, 14, 15]
[1, 2, 3], [12, 13, 14]
[2, 4, 5], [12, 14, 15]
[2, 4, 5], [12, 13, 14]
[2, 3, 4], [12, 14, 15]
[2, 3, 4], [12, 13, 14]
[5, 6], [15, 16]
[5, 6], [16, 16]
[6, 6], [15, 16]
[6, 6], [16, 16]
[2, 3, 1], [22, 23, 21]
[2, 3, 1], [32, 33, 11]
[2, 3, 1], [12, 44, 55]
[2, 3, 10], [22, 23, 21]
[2, 3, 10], [32, 33, 11]
[2, 3, 10], [12, 44, 55]
[23, 1, 2], [22, 23, 21]
[23, 1, 2], [32, 33, 11]
[23, 1, 2], [12, 44, 55]
[1, 4, 5], [22, 23, 21]
[1, 4, 5], [32, 33, 11]
[1, 4, 5], [12, 44, 55] 

Это весь мой код:

 print "***build kernel***"
        K = np.zeros((n_samples, n_samples))
        for i in range(n_samples):
            for j in range(n_samples):

                K[i,j] = self.kernel(X[i], X[j])

def kernel(x1,x2):
    N=8 #number of objects
    result=0 
    for i in xrange(N):
        for n,m in itertools.product(x1[i],x2[i]):
            result+=np.dot(n,m)
    return result    

Как вы можете видеть, сложность этого алгоритма слишком высока, и мои сэмплы намного больше этого. так что даже для небольшого набора данных, то есть содержит 400 образцов, мне нужно подождать 4 часа, чтобы получить результат. Я ищу лучший способ реализовать этот алгоритм. П.С .: Я думал о многопоточности или многопроцессорности, но я не уверен, поможет ли это ?!

Я ценю любое предложение!

Ответы на вопрос(3)

Ваш ответ на вопрос