我想使用一些迭代求解器来解决最小二乘问题。我需要稀疏矩阵,并且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()
。
编辑:
我刚刚在15%
的底部添加了density=0.01
,就解决了这个问题。但是,到底发生了什么?我不太了解Python在这里的工作方式。
一位同事建议gc.collect()
中可能存在循环引用,这会阻止释放内存。