本文采用的矩陣乘法方式是利用一個矩陣的行和二個矩陣的列相乘時不會互相影響。假設A(m,n)表示矩陣的m行,n列。那麼C(m,m)=A(m,n) * B(n,m) :
計算C矩陣時候分解成:
process-1:
C(1,1) = A(1,:) * B(:,1)
process-2:
C(1,2) = A(1,:) * B(:,2)
..........
process-m
C(m,m) = A(m,:) * B(:,m)
實現源碼:
import multiprocessing #導入多進程模塊,實現多進程
import os #驗證,打印進程的id
import numpy as np #這個模塊是爲了實現矩陣乘法
def matrix_muti(i,j):
print('Current process is {0}'.format(os.getpid())) #打印執行該函數時候的進程
A = [[1, 2], [5, 8]]
B = [[4, 8], [6, 5]]
A = np.array(A)
B = np.array(B)
#print(i,j)
try:
print(sum(A[i,:]*B[:,j]))
except:
pass
if __name__ == '__main__':
m=1
n=0
print('parent process is {0}'.format(os.getpid())) #獲取父進程id
for i in range(4):
#控制矩陣的行列數字變化
n=n+1
if n % 3 == 0:
m = m + 1
n = 1
#查看下標變化是否正確
print('下標變化:',m-1,n-1)
p = multiprocessing.Process(target=matrix_muti,args=(m-1,n-1,)) #固定格式,使用4個子進程求矩陣的乘積
p.start() #開始
p.join()
複製時候運行了下,發現複製到Pycharm時代碼縮進變了,需要手動調整下,不然會報錯
貼出運行結果如下: