【发布时间】:2015-05-17 10:43:39
【问题描述】:
我正在使用以下代码从scipy 运行这个SVD 求解器:
import numpy as np
from scipy.sparse.linalg import svds
features = np.arange(9,dtype=np.float64).reshape((3,3))
for i in range(10):
_,_,V = svds(features,2)
print i,np.mean(V)
我希望每次打印的平均值都相同,但是它会发生变化,并且似乎会在一些最喜欢的值之间循环。由于低级别优化/随机播种,我很高兴接受这种行为。
我不太明白为什么每次运行该脚本时它都会以相同的顺序输出相同的值。在我看来,这似乎是半确定性和半非确定性的。
这个问题正在影响一些更复杂的处理,理解它会很好,所以我至少可以做一些变通的解决方法。
【问题讨论】:
-
非常有趣和有用的问题。在底层 SVD(或以下)中想不出任何完全随机的东西。
-
奇怪的是,
TruncatedSVD默认有algorithm=random。可能是SVD的界面bug? -
@Ami
svds使用默认随机初始化的迭代方法 (ARPACK)。为什么会是一致的,我不知道。 -
@Dougal 谢谢!我想我得重新考虑一下(目前想不出它是随机的理由)。
-
也许归结为
numpy.random究竟是如何工作的问题,尤其是。seed未明确调用。也许您可以看看在调用之前立即调用它(使用一些固定值)是否可以使其再次具有确定性。