Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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_Parallel Processing_Dask - Fatal编程技术网

python中大型数组的乘法

python中大型数组的乘法,python,parallel-processing,dask,Python,Parallel Processing,Dask,我有大量的数组要在大量的迭代中相乘 我正在训练一个阵列长度约为1500的模型,我将执行3次乘法,大约1000000次,这几乎需要一周的时间 我发现Dask我试着将它与正常的numpy方式进行比较,但我发现numpy更快: x = np.arange(2000) start = time.time() y = da.from_array(x, chunks=(100)) for i in range (0,100): p = y.dot(y) #print(p) print( tim

我有大量的数组要在大量的迭代中相乘

我正在训练一个阵列长度约为1500的模型,我将执行3次乘法,大约1000000次,这几乎需要一周的时间

我发现Dask我试着将它与正常的numpy方式进行比较,但我发现numpy更快:

x = np.arange(2000)

start = time.time()
y = da.from_array(x, chunks=(100))

for i in range (0,100):
    p = y.dot(y)

#print(p)
print( time.time() - start)

print('------------------------------')

start = time.time()

p = 0

for i in range (0,100):
    p = np.dot(x,x)

print(time.time() - start)
0.0850279312072754

0.00015974044799804688


我使用dask是错误的还是numpy有那么快?

的性能取决于numpy实现链接到的

如果您有像OpenBLAS或MKL这样的现代实现,那么NumPy已经在使用您的所有内核全速运行了。在这种情况下,可能只会遇到阻碍,在没有保证的情况下尝试添加进一步的并行性,从而导致线程争用

如果您已经通过Anaconda安装了NumPy,那么您可能已经安装了OpenBLAS或MKL,因此我对您的性能非常满意,到此为止


但是,在实际示例中,您使用的块太小(
chunks=(100,)
)。dask任务调度器在每个任务中产生大约一毫秒的开销。您应该选择一个chunksize,以便每个任务需要100毫秒的时间来隐藏此开销。一般来说,一个好的经验法则是针对大小超过1兆字节的块。这就是造成性能差异的原因。

我增加了块,最好的是0.054,这离Numpy还很远。我想正如你所说的,Numpy已经并行化了。感谢你的详细解释,现在更清楚了。是的,对于快速解决的小问题,并行计算框架的开销通常会带来更多的阻碍。