首页 > 解决方案 > 高效循环数百万个元素

问题描述

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

标签: python-3.x

解决方案


不是一个蟒蛇人,但

  1. 确保 col 比 row 大(小优化,但优化仍然

  2. 使用多处理库(alink)。这应该会减少计算时间。

    (正如@Skam 在评论中指出的那样,多线程在这种情况下不会提高性能)

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


推荐阅读