scipy中的内存泄漏?

时间:2019-05-15 10:58:24

标签: python memory-leaks scipy

我想使用一些迭代求解器来解决最小二乘问题。我需要稀疏矩阵,并且scipy具有函数GenericForeignKey var ProductInfo = ''; var listItemEnum = collListItem.getEnumerator(); var section = oListItem.get_item("Section"); while (listItemEnum.moveNext()) { if (oListItem.get_item('Section') === 'Πειραιως Leasing'){ } var oListItem = listItemEnum.get_current(); ProductInfo += '\n\nID: '+ oListItem.get_id() + '<\nTitle: ' + oListItem.get_item('Title') + '\nLink: ' + oListItem.get_item('Link') + '<\nSection>' + oListItem.get_item('Section').get_lookupValue(); } var value = SP.FieldLookup.get_lookupField ('Section'); console.log(value); alert(ProductInfo.toString()); } function onQueryFailed(sender, args) { alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); } </script><input type="button" value="Get Section" onclick="getSection()"/>``` 。但是,如果将它们放在一个循环中,则内存消耗将激增。因此,似乎某处内存泄漏。

以下是外观的示例:

scipy.sparse.linalg.lsqr()

有人知道如何解决此问题,或者是否还有其他求解器?我已经尝试过scipy.sparse.linalg.lsmr()for i in range(0,200): print(i) tmp = sparse.linalg.lsmr(A_tot, np.asarray(b_tot.toarray().squeeze())) delta = tmp[0]

这是与之相关的link,但它来自2014年,被标记为已解决。但是那不是我的经验。

当我尝试以下和平代码时,消耗的内存是稳定的(没有增加):

此代码再现了错误:

lsqr

在下图中可以看到内存行为。我也尝试过以相同的行为使用lsmr。随着循环的迭代,内存增加,内存下降,然后又开始增加。 A_tot2 = sparse.rand(128365, 535, density=0.05) b_tot2 = sparse.rand(128365,1) pdb.set_trace() i = 0 while True: i += 1 start = time.time() tmp = sparse.linalg.lsmr(A_tot2, b_tot2.toarray().squeeze()) stop = time.time() print("Time: " + str(stop-start)) delta = tmp[0] print(i) # pdb.set_trace() 所在的位置上方有一个小字形图案。那是pdb.set_trace()enter image description here

编辑:

我刚刚在15%的底部添加了density=0.01,就解决了这个问题。但是,到底发生了什么?我不太了解Python在这里的工作方式。

一位同事建议gc.collect()中可能存在循环引用,这会阻止释放内存。

0 个答案:

没有答案