【发布时间】:2016-04-26 18:20:32
【问题描述】:
我有以下代码,因为对于较大的 l 来说它非常慢,所以我问自己是否有一个简单的可能性来并行化这个循环。我也尝试自己并行化它,但因为在我无法管理它之前我从未这样做过。如果你能帮助我,我会很高兴
print('Create 2.0L%.3frec%.3f.npy' % (l, r))
for x1 in range(a**l):
for x2 in range(a**l):
for x3 in range(a**l):
f11 = 0
if numpy.ndarray.sum(numpy.absolute(numpy.subtract(ws[x1:x1+1], ws[x2:x2+1]))) == 0:
f11 += 1
if numpy.ndarray.sum(numpy.absolute(numpy.subtract(ws[x1:x1+1], ws[x3:x3+1]))) == 0:
f11 += 1
re[x1][x2][x3] = 1.0*r/(a**l-2)*(numpy.product(numpy.absolute(numpy.subtract((2*ws[x1:x1+1]+ws[x2:x2+1]+ws[x3:x3+1]), 2)))-f11)
cv1 = numpy.ndarray.sum(numpy.absolute(numpy.subtract(ws[x1:x1+1], ws[x2:x2+1])))
cv2 = numpy.ndarray.sum(numpy.absolute(numpy.subtract(ws[x1:x1+1], ws[x3:x3+1])))
c2 = 0
if cv1 == 0:
c2 += 1
if cv2 == 0:
c2 += 1
c2 *= 1.0*(1-r)/2
re[x1][x2][x3] += c2
numpy.save('2.0L%.3frec%.3f' % (l, r), re)
print('Saved 2.0L%.3frec%.3f.npy' % (l, r))
因此,由于 re 的所有条目都独立于其他条目,因此应该有一种方法。我想如果我知道如何将 python 程序并行化的解决方案,我会有所帮助:
for x1 in range(a):
for x2 in range(a):
for x3 in range(a):
re[x1][x2][x3] = 5*3
【问题讨论】:
-
您需要提供更多背景信息。你的数据格式是什么?你能解释一下循环应该做什么吗?
-
看看多处理库
-
不会
ws[x1:x1+1]本质上意味着ws[x1]和其他人类似吗? -
你不是说矢量化吗?
-
@Divakar:你是对的......我只是让它变得更复杂......
标签: python numpy parallel-processing