Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
矩阵乘法返回错误的矩阵python并行_Python_Matrix_Multiprocessing_Multiplication - Fatal编程技术网

矩阵乘法返回错误的矩阵python并行

矩阵乘法返回错误的矩阵python并行,python,matrix,multiprocessing,multiplication,Python,Matrix,Multiprocessing,Multiplication,我有一个学校项目,在那里我必须做一些python并行函数。其中之一是矩阵乘法(我不能使用numpy)。我试着用多线程处理,但速度太慢了,建议我用多线程处理。速度要快得多,但有一个问题。只有当我使用一个过程时,我才能得到正确的矩阵。有人能帮忙吗?代码如下: import numpy as np import time import multiprocessing.dummy as mp min = -10 max = 10 n = 10 x = ((np.random.rand(n, n) *

我有一个学校项目,在那里我必须做一些python并行函数。其中之一是矩阵乘法(我不能使用numpy)。我试着用多线程处理,但速度太慢了,建议我用多线程处理。速度要快得多,但有一个问题。只有当我使用一个过程时,我才能得到正确的矩阵。有人能帮忙吗?代码如下:

import numpy as np
import time
import multiprocessing.dummy as mp

min = -10
max = 10
n = 10
x = ((np.random.rand(n, n) * (max - min) ) + min).astype('int')
y = ((np.random.rand(n, n) * (max - min) ) + min).astype('int')

z = [[0 for i in range(n)] for j in range(n)]
jump = 0

def matrixMult(start):
    for i in range(start, start + jump):
        print("HEJ")
        for k in range(n):
            for j in range(n):
                z[i][j] += x[i][k] * y[k][j]

def multPrepare(x, y, i):
    pool = mp.Pool(i)
    pool.map(matrixMult, range(0, n, jump))
    return z

if __name__ == '__main__':

    i = 1
    while i < 5:
        start_time = time.time()
        jump = int(round(n / i))
        z = multPrepare(x, y, i)
        print("number of cores: " + str(i) + ", TIME: "+ str(time.time()-start_time) + " seconds")
        i += 1

    print(z)
    print(z == x.dot(y))
将numpy导入为np
导入时间
将multiprocessing.dummy导入为mp
最小值=-10
最大值=10
n=10
x=((np.random.rand(n,n)*(max-min))+min.astype('int'))
y=((np.random.rand(n,n)*(max-min))+min.astype('int'))
z=[[0代表范围(n)中的i]代表范围(n)中的j]
跳转=0
def矩阵结果(开始):
对于范围内的i(开始、开始+跳跃):
打印(“HEJ”)
对于范围(n)内的k:
对于范围(n)内的j:
z[i][j]+=x[i][k]*y[k][j]
def multPrepare(x,y,i):
池=mp.池(i)
map(矩阵结果,范围(0,n,跳跃))
返回z
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
i=1
当我<5时:
开始时间=time.time()
跳转=整数(圆形(n/i))
z=多重准备(x,y,i)
打印(“芯数:“+str(i)+”,时间:“+str(TIME.TIME()-开始时间)+”秒”)
i+=1
打印(z)
打印(z==x点(y))

结果矩阵仅在i=1时正确。

欢迎使用StackOverflow!请澄清:您写了“我不能使用numpy”,但随后
将numpy导入为np
-什么是正确的?我不能使用numpy的函数点或matmul来乘以矩阵,我使用它只是为了创建矩阵C并验证结果。欢迎使用StackOverflow!请澄清:您写了“我不能使用numpy”,但随后
将numpy导入为np
-什么是正确的?我不能使用numpy的函数点或matmul乘以矩阵,我使用它只是为了创建矩阵C并验证结果。