我试图通过让不同的内核处理矩阵的不同部分来并行化大型矩阵计算。
这是用于计算非常大的时间序列集的相关矩阵。我的代码正常运行良好,但是要花很多时间才能得出结果。我想并行化一部分计算量大的代码,以便可以利用工作站中可用的所有内核。我尝试了多线程,它也很好用。
因为,实际代码很长。我将使用伪代码显示想要的内容。
```python
from multiprocessing import Pool
from threading import Thread
import numpy as np
q_ts=np.random.rand(10,10)
corr=np.zeros((10,10),dtype=np.float16)
def f(i):
for j in range (i+1,10):
corr[i,j]=np.corrcoef(q_ts[i,:],q_ts[j,:])[0,1]
corr[j,i]=corr[i,j]
#for i in range(10):
# th=Thread(target=f,args=(i,))
# th.start()
if __name__ == "__main__":
p1=Pool()
p1.map(f,range(10))
p1.close()
p1.join()
print('\n')
print(corr)
```
使用代码的注释部分时,我得到的正确结果是
[[ 0. -0.5337 0.02231 -0.3938 -0.04288 0.4326 -0.5283
-0.1686 0.281 -0.1477 ]
[-0.5337 0. -0.04367 -0.0493 0.09546 -0.00803 0.172
0.0645 -0.6333 0.1659 ]
[ 0.02231 -0.04367 0. 0.4673 -0.4858 0.11005 -0.06476
0.5034 0.2356 -0.1225 ]
[-0.3938 -0.0493 0.4673 0. -0.0713 -0.396 0.1642
0.6626 0.007965 -0.559 ]
[-0.04288 0.09546 -0.4858 -0.0713 0. -0.181 0.2788
-0.3774 -0.0618 -0.593 ]
[ 0.4326 -0.00803 0.11005 -0.396 -0.181 0. -0.2251
0.0633 0.19 0.4033 ]
[-0.5283 0.172 -0.06476 0.1642 0.2788 -0.2251 0.
0.2556 0.3428 -0.01578 ]
[-0.1686 0.0645 0.5034 0.6626 -0.3774 0.0633 0.2556
0. -0.03003 -0.1578 ]
[ 0.281 -0.6333 0.2356 0.007965 -0.0618 0.19 0.3428
-0.03003 0. -0.00935 ]
[-0.1477 0.1659 -0.1225 -0.559 -0.593 0.4033 -0.01578
-0.1578 -0.00935 0. ]]
但是当我使用Pool时,我没有得到正确的答案,我得到了
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]