我花了几个小时来尝试并行化我的数字运算代码,但是当我这样做时它只会变慢.不幸的是,当我尝试将其减少到下面的示例时,问题就消失了,我真的不想在这里发布整个程序.所以问题是:在这类程序中我应该避免哪些陷阱?
(注意:Unutbu的答案在底部后跟进.)
以下是情况:
BigData
包含大量内部数据的类.在该示例中,存在一个ff
插值函数列表; 在实际的程序,还有更多,例如ffA[k]
,ffB[k]
,ffC[k]
.do_chunk()
.do_single()
将在5秒内do_multi()
运行并且将在55秒内运行.xi
和yi
数组切割成连续的块并迭代k
每个块中的所有值来分解工作.这工作得更好一点.现在,无论是使用1,2,3或4个线程,总执行时间都没有差别.但当然,我希望看到实际的加速!def do_chunk(array1, array2, array3)
并对该数组进行仅限于numpy的计算.在那里,有显着的速度提升.#!/usr/bin/python2.7
import numpy as np, time, sys
from multiprocessing import Pool
from scipy.interpolate import RectBivariateSpline
_tm=0
def stopwatch(msg=''):
tm = time.time()
global _tm
if _tm==0: _tm = tm; return
print("%s: %.2f seconds" % (msg, tm-_tm))
_tm = tm
class …
Run Code Online (Sandbox Code Playgroud) 我想加载多个 numpy 文件并将它们放入像这样的数组中 ["file1.npy","file2.npy","file3.npy",......] 在此数组上应用 pca 降维。
任何帮助,将不胜感激
代码
k=1
for indexPatient in range(0, len(patients)):
interictalData_withoutpca=np.concatenate((interictalData, tmpData[0:22,start*256:end]), axis=1)
x=np.array(interictalData_withoutpca)
y=np.save('interictalData_matrix'+str(k)+'_'+patients[indexPatient]+'_'+str(l),x)
k+=1
Run Code Online (Sandbox Code Playgroud)