- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MATLAB 有一个 gsvd 函数来执行广义 SVD。自 2013 年以来,我认为关于 github pages 的讨论很多。关于把它放在 scipy 中,有些页面有我可以使用的代码,例如 here这对于像我这样的新手来说 super 复杂(让它运行起来)。
我还找到了 LJWilliams github 页面 implementation .这是不好的,因为在转移到 python 3 时有很多错误。尝试更正简单的错误,例如 assert 和 print。它很快就会变得复杂。
谁能帮我提供 python 的 gsvd 代码或告诉我如何使用在线代码?
此外,这就是我在 LJWilliams 实现中得到的,一旦打印和断言语句被更正。代码看起来很复杂,我不确定花时间在上面是不是最好的办法!还有一些人在同一个 github 页面上报告了问题,我不确定这些问题是否已修复或连接。
n = 10
m = 6
p = 6
A = np.random.rand(m,n)
B = np.random.rand(p,n)
gsvd(A,B)
File "/home/eghx/agent18/master_thesis/AMfe/amfe/gsvd.py", line 260, in gsvd U, V, Z, C, S = csd(Q[0:m,:],Q[m:m+n,:])
File "/home/eghx/agent18/master_thesis/AMfe/amfe/gsvd.py", line 107, in csd Q,R = scipy.linalg.qr(S[q:n,m:p])
File "/home/eghx/anaconda3/lib/python3.5/site-packages/scipy/linalg/decomp_qr.py", line 141, in qr overwrite_a=overwrite_a)
File "/home/eghx/anaconda3/lib/python3.5/site-packages/scipy/linalg/decomp_qr.py", line 19, in safecall ret = f(*args, **kwargs)
ValueError: failed to create intent(cache|hide)|optional array-- must have defined dimensions but got (0,)
最佳答案
如果您想使用 github 上的 LJWillams 实现,则有几个错误。但是,要完全理解该技术,我可能会建议您自己动手实现它。我查看了 Octave(相当于 MATLAB 的免费软件)的作用及其 "code is a wrapper to the corresponding Lapack dggsvd and zggsvd routines." ,恕我直言,这是 scipy 应该做的。
我会发布我发现的错误,但我不会发布完整工作顺序的代码,因为考虑到受版权保护的 MATLAB 实现,我不确定它在版权方面的情况已翻译。
警告:我不是广义 SVD 方面的专家,并且只是从调试的角度来看这个问题,而不是底层算法是否正确。我已经在您的原始随机数组上进行了这项工作,并且测试用例已经存在于 Python 文件中。
设置k
在第 63 行附近,设置 k
的条件和对 numpy.argparse
的误解(特别是与 MATLAB 的 find
相比)似乎在某些情况下将 k
设置为错误。将该代码更改为
if q == 1:
k = 0
elif m < p:
k = n;
else:
k = max([0,sum((np.diag(C) <= 1/np.sqrt(2)))])
S[1,1] 应该是 S[0,0],我认为(Python 0 索引数组)
这里的 numpy 矩阵切片似乎是错误的。我通过将第 83-95 行更改为以下内容来使代码正常工作:
UT, ST, VT = scipy.linalg.svd(slice_matrix(S,i,j))
ST = add_zeros(ST,np.zeros([n-k,r-k]))
if k > 0:
print('Zeroing elements of S in row indices > r, to be replaced by ST')
S[0:k,k:r] = 0
S[k:n,k:r] = ST
C[:,j] = np.dot(C[:,j],VT)
V[:,i] = np.dot(V[:,i],UT)
Z[:,j] = np.dot(Z[:,j],VT)
i = np.arange(k,q)
Q,R = scipy.linalg.qr(C[k:q,k:r])
C[i,j] = np.diag(diagf(R))
U[:,k:q] = np.dot(U[:,k:q],Q)
diagp()
有两个使用 X*Y
的矩阵乘法应该是 np.dot(X,Y)
(注意 *
是 element-wise multiplication在 numpy
中,不是矩阵乘法。)
关于python - 用于 python 广义奇异值分解的 GSVD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814024/
这是我感兴趣的测试: http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm 如何将这段代码改编成接受数值向量并返回指定要删除
我使用 TensorFlow 1.12 基于 Material 进行语义(图像)分割。使用多项式交叉熵损失函数,这会产生不错的结果,尤其是考虑到我使用的训练数据量稀疏,mIoU 为 0.44: 然而,
AFAIK,在 Hindley-Milner 类型系统中使用的统一可以通过在构造函数位置允许类型变量并在这种情况下放宽 arity 约束来推广以统一更高级的类型: f a ~ T a1 b1 f ~
在阅读 article 时在 Javascript 中实现通用 curry 时,我偶然发现了这段代码。 function curry(fn) { return (...xs) => { i
我想使用 C++14 中引入的广义 lambda 捕获(有关解释,请参阅 Move capture in lambda)。但是,我的代码的其余部分是 C++11 友好的。我想按照以下方式做一些事情 #
我正在尝试实现 this paper 中介绍的广义 Hough 变换在 MATLAB 中。我也试过使用 this document理解算法。我一直在研究如何计算梯度角以找到要在 R 表中使用的 Φ。
假设我们有这样一段代码: std::vector> tasks; 然后我们添加这样的任务: tasks.push_back([]() { // ... } 这行得通。但现在我们要添加该任务:
问题:为什么会打印出以下内容: ChildB___Parent of ChildB ChildB___Parent of ChildB 而不是我认为它应该打印出来的: ChildA___Parent
W3C 推荐 RDF 1.1 概念和抽象语法 defines多么广义 RDF 三元组 是(即,一个非标准三元组,其中每个主语/谓语/宾语都可以是 IRI/bnode/文字)。 关于它的可能用途,它给出
我是一名优秀的程序员,十分优秀!