有效地遍历数百万个元素

时间:2019-07-01 19:05:00

标签: python-3.x

在通过“ 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花费太多时间。 有人可以帮我吗? 问候

1 个答案:

答案 0 :(得分:0)

不是很多python家伙,但是

  1. 确保col是比行(small optimization, but optimization nevertheless)高的数字

  2. 使用多处理库(alink)。这样可以减少计算时间。

    (如@Skam的评论所述,在这种情况下多线程不会提高性能)

此外,您可能会考虑对计算本身进行一些优化。