簡體   English   中英

帶有固定種子的 scipy.sparse.linalg.eigsh

[英]scipy.sparse.linalg.eigsh with fixed seed

我正在嘗試將scipy.sparse.linalg.eigsh與固定種子一起使用。

為此,我需要指定 v0 參數。 但是,我無法弄清楚到底需要什么進入 v0,因為這里的文檔非常少(它只是說 numpy.ndarray),而且錯誤消息對我來說沒有任何信息。

代碼:

import numpy as np
import scipy.sparse.linalg

A = scipy.sparse.rand(10,10)
# v0 = np.random.rand(10,10)
v0 = np.random.rand(10,5)
w, v = scipy.sparse.linalg.eigsh(A, k=5, v0=v0)

錯誤:

錯誤:無法將 _arpack.dsaupd 的第 10 個參數“workd”轉換為 C/Fortran 數組

首先,文檔沒有提到參數v0必須對種子做任何事情的任何地方。 它說

v0 : ndarray,可選的迭代起始向量。 默認值:隨機

從我天真地理解它的初始向量,當它開始尋找特征值特征向量時,它以這個參數v0作為初始向量開始,現在到seed ,我們使用seed來修復為這些向量生成的數字。 所以你的問題真的沒有意義。 即使你讓這個程序運行,你也會得到不同的結果,為了避免我們使用seed來使結果可重復。

再說一次,我在這里可能是錯的。

其次,如果您想為您的方法修復種子,我建議使用numpy來修復種子,因為scipy使用numpy生成隨機數。

所以代碼看起來像這樣

import numpy as np 
np.random.seed(seed= 13)

然后如果參數v0是種子,你可以完全避免它

w, v = scipy.sparse.linalg.eigsh(A, k=5)

同樣,我本可以在評論中發布此內容,但最好添加一些代碼來闡明您的觀點。

聚苯乙烯

我可能誤解了您的問題,如果是這種情況,請隨時投反對票。

eigsh獲得可重現結果的正確方法是:

import numpy as np
import scipy.sparse.linalg

np.random.seed(0)
A = scipy.sparse.rand(10,10)
v0 = np.random.rand(min(A.shape))
w, v = scipy.sparse.linalg.eigsh(A, k=5, v0=v0)

每次結果都一樣。 (感謝@hpaulj 的正確評論)

請注意,在不設置v0情況下修復種子是不夠的:

np.random.seed(0)
A = scipy.sparse.rand(10,10)
w, v = scipy.sparse.linalg.eigsh(A, k=5)

每次都有不同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM