import numpy as np A = np.array([[1,0,0],[0,1,0],[0,0,1]]) B = np.array([[1,0,0],[0,1,0],[0,0,1]]) np.dot(A,B) np.inner(A,B) np.linalg.det(A) A[0][1] c = np.array([[0,0,0],[0,0,0],[0,0,0]]) for i in range(len(A)): for k in range(len(B)): val = 0 for j in range(len(A[0])): val += A[i][j]*B[j][k] c[i][k] = val #print i, k, val # print c def value(i,k,A,B): val = 0 for j in range(len(A[i])): val += A[i][j]*B[j][k] return val for i in range(len(A)): for k in range(len(B)): #print value(i,k,A,B) c[i][k] = value(i,k,A,B) print c import multiprocessing as mp import random import string pool = mp.Pool(processes=4) for i in range(len(A)): results = [pool.apply(value, args=(i,k,A,B,)) for k in range(len(B))] print(results) pool = mp.Pool(processes=4) for i in range(len(A)): results = [pool.apply_async(value, args=(i,k,A,B,)) for k in range(len(B))] output = [p.get() for p in results] print(output) def prod(i,A,B): val =0 for k in range(len(B[0])): for j in range(len(A[0])): val += A[i][j]*B[j][k] return val for i in range(len(A[0])): print prod(i,A,B)