问题标签 [svd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
exception - 在 numpy 的 svd 方法中使用替代 LAPACK 驱动程序?
我正在使用 numpy.svd 来计算条件不良矩阵的奇异值分解。对于某些特殊情况,svd 不会收敛并引发 Linalg.Error。我做了一些研究,发现 numpy 使用 LAPACK 的 DGESDD 例程。标准实现的硬编码迭代限制为 35 次或其他迭代。如果我尝试在 Matlab 中分解相同的矩阵,一切正常,我认为有两个原因: 1. Matlab 使用 DGESVD 而不是 DGESDD,这通常看起来更健壮。2. Matlab 在例程中使用了 75 次的迭代限制。(他们在源代码中对其进行了更改并重新编译。)
现在的问题是:有没有一种简单的方法可以将 numpy 中使用的后端从 DGESDD 更改为 DGESVD 而无需修改 numpy 源?
在此先感谢米沙
java - Java 矩阵库中的问题
我正在从事一个需要为 74000 X 640 维度的矩阵获取 SVD(单值分解)的项目。我尝试了这三个库:Jama、高效的 Java Matrix 库 (EJML) 和 OjAlgo。我根据 SVD 中的 Java Matrix 基准内存结果选择这三个库。起初我使用 Jama,但后来我发现行数必须 >= 列数,我需要在另一个步骤中获取任何矩阵维度的 SVD。所以,我搬到了 EJML 和 OjAlgo,但我对 EJML 有一些疑问/问题:
EJML--> 它为 SVD 提供了正确的结果,但是当我将矩阵大小扩大到 74000 X 640 维度时,它给了我堆内存异常,那么库的矩阵大小是否有限制?
这是我用于创建矩阵的代码:
请帮助我理解并解决我的问题。
谢谢
c - Xcode 的 SVD 库
我四处寻找要在 Xcode 的 C 代码中使用的 SVD 库。我找到了 svdcmp.c(来自计算中的数值食谱),但它非常非常慢。我找到了其他 SVD 库,例如SVDLIBC和CLAPACK。但它们必须由终端编译。有没有办法在 Xcode 中编译它们?或者可能有另一个图书馆在场?
java - JAVA中的大稀疏矩阵特征分解
我正在寻找一个 Java 中的线性代数库,它可以处理大型“稀疏”矩阵(比如 100 万乘 100 万)并在矩阵上执行像 SVD、LU 这样的分解。
我环顾四周并尝试了 COLT,但是它只能处理最多固定数量的元素的矩阵。
EJML 站点还提到它无法处理这个问题。(http://code.google.com/p/efficient-java-matrix-library/wiki/FAQ)
我知道 C++ 中有一些包可以处理这种大小的数据,但是,我不能从 Java 迁移,因为我有所有其他代码都是围绕 Java 构建的。
有什么想法吗?任何帮助是极大的赞赏!
objective-c - 使用 xcode 中 LAPACK 的 SVD 从 Objective-C 中的 A = USVt 计算 V
我的目标是将透视坐标从已知矩形(例如 800 x 600 屏幕)转移到倾斜/旋转的四边形。为此,我发现了这一点,这非常有帮助:将捕获的坐标转换为屏幕坐标
我想这个问题还有更多的解决方案。1 通过从你的四边形中制作三角形并应用一些我还无法解决的数学函数。或使用公式 A=USVt 得出的 H 矩阵。这看起来不错,因为一旦您拥有正确的 H 矩阵,您就可以很容易地传输任何坐标,如上面链接中所述。所以我想我会去那个!
经过一番挣扎,我能够在matlab中做到这一点(我测试了上面的链接)并且它有效:)但是现在在objective-C中?!
我写了下面的代码,它以 (A=USVt) 的 A 开头。要计算 Vt,这是我进入 H 矩阵的第一步,我应该使用与 matlab [USV]=SVD(A) 类似的函数;功能。所以我在这里找到:调用 MATLAB 的内置 LAPACK/BLAS 例程来执行此操作,您可以包含加速.h 框架,然后能够使用 C-LAPACK 等效 dgesvd_(...);
顺便说一句,我使用与将捕获的坐标转换为屏幕坐标中相同的坐标,以使其更易于测试。
解决 了我遇到的问题是计算多维数组 A 并将其转换为一维数组的方式。因为 Lapacks 的输入似乎总是一维的:)
我还包括了数组 A 的计算方式。WP = 网络摄像头和 SC = 800*600 屏幕。
然后在 matlab 中我们取 Vt 的最后一列并将其重塑为 3x3 矩阵。并将其转置,使其变为 H。
解决了!!
matlab - MATLAB SVD 奇异值排序
SVD 的 MATLAB 文档指出,返回的对角矩阵具有按降序排列的奇异值。有没有办法找出奇异值的自然顺序是什么?我问的原因是因为奇异值对应于与输入矩阵的行相关的维度。
matlab - opencv中的Matlab SVD输出
在 Matlab SVD 函数中输出三个矩阵:
我们可以使用 S 矩阵找到尽可能少的分量,以减少 X 的维数以保留足够的方差。我的问题是如何使用 OpenCV 找到S
矩阵(不是U
矩阵),是否可以使用 OpenCV SVD 中的构建找到 S 矩阵?我的意思是 OpenCV SVD 函数像 Matlab 一样输出三个矩阵,但我不知道它们是否相同。这是 OpenCV 中的 SVD:
这是 Matlab SVD:
谢谢你。
machine-learning - 取多少主成分?
我知道主成分分析对矩阵进行 SVD,然后生成特征值矩阵。要选择主成分,我们只需要取前几个特征值。现在,我们如何确定应该从特征值矩阵中获取的特征值的数量?
python - numpy.linalg.svd 不按降序返回 Sigma
我目前使用 numpy.linalg 的 svd 函数在大矩阵(准确地说是图像)上计算 SVD。我发现的文档和示例似乎都表明返回的 Sigma 值按降序排序(暗示 U 和 V^T 的正确排序)。
但是,在我的测试中,sigma 值似乎是无序的。所以我的问题是,由于某种原因,我的 linalg 是否出了问题(我知道极不可能),或者它是否只是将 sigma 的返回无序?
后续问题是对 sigma 进行排序的最佳方法,以便 U 和 V^T 中的顺序也反映变化。
matlab - MATLAB:svds() 没有收敛
因此,对一些输入数据使用 MATLAB 的svds()函数,如下所示:
我注意到,从运行到运行相同的数据,每次运行我会得到截然不同的输出 SVD 大小。当我检查是否设置了“标志”时,我发现它是,表明 SVD 没有收敛。我在这里的正常系统是,如果它真的需要收敛,我会做这样的事情:
但是据我所知,当您使用“L”作为第三个参数时,第四个参数被忽略了,这意味着我只需要处理它没有收敛的事实吗?我什至不确定如何使用“sigma”参数代替“L”参数。我还尝试减少计算无济于事的 SVD 数量。对此问题的任何帮助将不胜感激。
编辑 在跟进下面的评论时,我发现问题与我构建数据矩阵的方式有关。原来我不小心反转了一个矩阵,输入的大小是 (4000x1) 而不是 (20x200),这就是拒绝收敛的原因。 这不是问题
第二次编辑 如果有人还在关注这个,我实际上是错的,我的数据只是因为我错误地缩放了输入而收敛了。这是一个在我生成数据时生成数据的程序:
我也试过让它跑到 svdOpts2.maxit > 1e9,但是整个周末都跑了,从来没有超过 4.096e8。任何意见,将不胜感激。