以下代码由于MemoryError
而失败。我相信这是因为它是一次性计算出itertools部分。是否可以将itertools与for循环一起计算出来,以避免填满我的RAM。
(或者是获得更大计算机的唯一选择!)
请告知-
N = 8
a = TWFclass(N)
b = []
c = np.zeros_like(a.TWFm)
for i in np.array(list(itertools.product(range(N), repeat=int(N*np.log2(N))))):
a.change(i.reshape(N, int(np.log2(N))))
if a.check(16):
b.append(a.TWFm)
有关代码的一些信息:
-itertools语句为矩阵a.TWFm生成一个数字
-然后通过.change函数将其分配给a.TWFm
-。check函数从某些计算中返回true或false,将其附加到列表b以便稍后进行分析
编辑(评论的答案)
评论1)
np.array
是否需要列表? itertools.product
不会返回什么?
itertools必须有一个列表以进行解压缩/其他操作(即将值拖出对象),因为没有列表会导致错误TypeError: iteration over a 0-d array
评论2)
我很确定您不能有一个“惰性”数组;无论是给它一个列表还是一个生成器作为参数(即使支持),结果数组都将把所有数据存储在内存中(尽管要尽可能紧凑地存储)。
如果我稍微改变我的问题以说我知道我有一个持续x = N **(log2(N)* N)的for循环,我可以理解你的意思,你知道itertools是否可以使你工作循环号x的单个itertools.product
?希望有道理...
评论3)
很好奇... TWFclass
和TFWm
是什么?在上课吗我不知道是图书馆的一部分吗?
不,这是我自己的班级,其中TWFm
是(N,log2(N))的矩阵,而TWFclass
是班级名称...
即我有
class TWFclass(N):
def __init__(self, N):
self.N = N
self.TWFm = np.zeros([self.N, int(np.log2(self.N))])
答案 0 :(得分:1)
如果您逐个使用迭代器,为什么要将迭代器转换为数组或列表?
以下内容同样适用:
E