相关疑难解决方法(0)

我怎样才能在Python中明确释放内存?

我写了一个Python程序,它作用于一个大的输入文件,创建了几百万个表示三角形的对象.算法是:

  1. 读取输入文件
  2. 处理文件并创建由顶点表示的三角形列表
  3. 以OFF格式输出顶点:顶点列表,后跟三角形列表.三角形由顶点列表中的索引表示

在打印三角形之前打印出完整的顶点列表的OFF的要求意味着在将输出写入文件之前我必须在内存中保存三角形列表.与此同时,由于列表的大小,我遇到了内存错误.

告诉Python我不再需要某些数据的最佳方法是什么,它可以被释放?

python memory memory-management

338
推荐指数
9
解决办法
42万
查看次数

itertools 产品使用太多内存

我只有两个句子我想产生变化并计算 leveshtein 距离,但是当我尝试使用 itertools 产生这个列表时,即使我的 64GB RAM 机器也会超载。

有没有办法限制这一点,即使我必须将其限制为一定数量的组合。

到目前为止,这是我的代码:

from __future__ import print_function
import itertools
import sys

in_file = sys.argv[1]
X = []


with open(in_file) as f:
        lis = list(f)
X.append([' '.join(x) for x in itertools.product(*map(set, zip(*map(str.split, lis))))])

for x in X:
        print x
Run Code Online (Sandbox Code Playgroud)

python cartesian-product python-itertools

3
推荐指数
1
解决办法
1582
查看次数

如何使用生成器在 Python 中获取笛卡尔积?

我正在尝试获得多个数组的笛卡尔积,但数组非常大,我正在尝试优化内存使用。我尝试使用下面的代码实现一个生成器,但它只是返回在某个位置有一个生成器。

import itertools

x = [[1,2],[3,4]]

def iter_tools(*array):
    yield list(itertools.product(*array))

print(iter_tools(*x))
Run Code Online (Sandbox Code Playgroud)

当我尝试相同的代码但用return而不是yield它工作正常时。如何通过实现生成器来获得笛卡尔积?

python iteration generator cartesian-product

2
推荐指数
1
解决办法
625
查看次数