在通过“ itertools.product”创建的列表中,我有262144个元素的列表。现在,我必须遍历这些元素并将其与所有其他元素相乘,这将花费太多时间。 (我没有任何内存问题/ CPU)
elements = []
for e in itertools.product(range(4), repeat=9):
elements.append(e)
for row in elements:
for col in elements:
do_calculations(row, col)
def do_calculations(ro, co):
t = {}
t[0] = [multiply(c=ro[0], r=co[0])]
for i in range(1, len(ro)):
_t = []
for j in range(i+1):
_t.append(multiply(c=ro[j], r=co[i-j]))
t[i] = _t
for vals in t.values():
nx = len(vals)
_co = ro[nx:]
_ro = co[nx:]
for k in range(len(_ro)):
vals.append(multiply(c=_co[k], r=_ro[k]))
_t = []
for k in t.values():
s = k[0]
for j in range(1, len(k)):
s = addition(c=s, r=k[j])
_t.append(s)
return _t
def addition(c, r) -> int:
__a = [[0, 3, 1, 2],
[3, 2, 0, 1],
[0, 3, 2, 1],
[1, 0, 2, 3]]
return __a[c][r]
def multiply(c, r) -> int:
__m = [[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 3, 1, 2],
[0, 2, 3, 1]]
return __m[c][r]
处理带有行的单个col花费太多时间。 有人可以帮我吗? 问候
答案 0 :(得分:0)
不是很多python家伙,但是
确保col是比行(small optimization, but optimization nevertheless)高的数字
使用多处理库(alink)。这样可以减少计算时间。
(如@Skam的评论所述,在这种情况下多线程不会提高性能)
此外,您可能会考虑对计算本身进行一些优化。