Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Nystrom近似方法_Python_Matrix - Fatal编程技术网

Python中的Nystrom近似方法

Python中的Nystrom近似方法,python,matrix,Python,Matrix,我试图用Python实现Nystrom近似方法。假设我已经计算了亲和矩阵A(在所选样本之间)和B(在其余样本和所选样本之间),下面是我的代码: B_T = np.transpose(B) d1 = np.sum(np.vstack((A, B_T)), 0)[np.newaxis] d2 = np.sum(B, 0) + np.dot(np.sum(B_T, 0), np.dot(np.linalg.pinv(A), B))[np.newaxis] dhat = np.sqrt(1./np.hs

我试图用Python实现Nystrom近似方法。假设我已经计算了亲和矩阵A(在所选样本之间)和B(在其余样本和所选样本之间),下面是我的代码:

B_T = np.transpose(B)
d1 = np.sum(np.vstack((A, B_T)), 0)[np.newaxis]
d2 = np.sum(B, 0) + np.dot(np.sum(B_T, 0), np.dot(np.linalg.pinv(A), B))[np.newaxis]
dhat = np.sqrt(1./np.hstack((d1, d2))).T
A = np.dot(A, np.dot( dhat[0:subset_len], dhat[0:subset_len].T ) )
B1 = np.dot( dhat[0:subset_len], dhat[subset_len:].T)
B = B*B1
# here is the eigendecomposition
B_T = np.transpose(B)
Apseudo = np.sqrt(np.linalg.pinv(A))
BBT = np.dot(B,B_T)
W = np.vstack((A, B_T))
S = A + np.dot(Apseudo, np.dot(BBT, Apseudo) )
w,v = np.linalg.eigh(S)
ind = np.argsort(w)[::-1]
v = v[:, ind] # eigenvectors in decreasing order
w = w[ind] # eigenvalues in decreasing order
w = np.diag(w)
W = np.dot(W, Apseudo)
V1 = np.dot(W, np.dot(v, np.linalg.pinv(np.sqrt(w))))
m = 45 #embedding dimension
V = V1[:,:m]
# normalize eigenvectors to have unit length
for j in range(len(w)):
    V[:,j] = V[:,j]/np.sqrt(np.sum(V,0))
    V[:,j] = V[:,j]/np.linalg.norm(V[:,j])
当我执行该文件时,我在计算V1:*时出错,输入DLASCL时,参数4的值非法。有人能帮我解决这个错误吗


这是对完全不知道的人的简单解释。

我真的无法理解反对票/检查您是否没有尝试获取非psd矩阵的根。我认为论文中提到的方法有一个缺陷,可以考虑到这一点。即使这是真的,我如何补偿呢?我已经很久没有使用过这个方法了,但问题在于二次拍摄法。注意:我不是反对票,但这个问题似乎不必要地难以解释。实际上,将错误消息显示为输出会有所帮助,显示发生崩溃的条件也会有所帮助。由于崩溃是在计算V1时发生的,所以我会尝试将该行拆分为离散操作,看看这是否有帮助,即v、w或w是否有任何奇怪之处?你能接受np.sqrt(w)吗?一旦你这样做了,你能得到伪逆吗?这有什么奇怪的吗?如果事情看起来仍然合理,看看各种各样的dot产品。。。(HTH)