问题标签 [matrix-decomposition]
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.
c++ - Eigen LLT (Cholesky) 失败,而 SVD 有效
我正在尝试使用 Eigen在高斯过程(从这里)上重现一些 numpy 代码。基本上,我需要从多元正态分布中抽样:
均值向量当前为零,而协方差矩阵是通过各向同性平方指数核生成的方阵:
我现在可以很好地生成协方差矩阵(它可能可以被清理,但现在它是一个 POC):
但是,当我需要对多元正态进行采样时,我的问题就开始了。
我试过使用这个接受的答案中提出的解决方案;但是,分解仅适用于最大为 30x30 的协方差矩阵;不仅如此,LLT 无法分解矩阵。答案中提供的替代版本也不起作用,并创建 NaN。我也尝试了 LDLT,但它也中断了(D 包含负值,所以 sqrt 给出 NaN)。
然后,我很好奇,我研究了 numpy 是如何做到这一点的。原来 numpy 实现使用SVD 分解(使用 LAPACK),而不是 Cholesky。所以我尝试复制他们的实现:
各种缺点是我试图准确地重现 numpy 的结果。
无论如何,这工作得很好,即使是大尺寸。我想知道为什么 Eigen 不能做 LLT,但 SVD 有效。我使用的协方差矩阵是相同的。我可以做些什么来简单地使用 LLT 吗?
编辑:这是我的完整示例:
opencv - 本质分解的稳定翻译
当使用单个相机实现单目 SLAM 或运动结构时,可以估计到未知尺度的平移。事实证明,如果没有任何其他外部信息,这个规模是无法确定的。但是,我的问题是:如何在所有子翻译中统一这个比例。例如,如果我们有 3 帧(Frame0、Frame1 和 Frame2),我们应用跟踪如下:
- Frame0 -> Frame 1 : R01, T01 (R&T 可以使用 F Matrix 和 K 矩阵以及 Essential Matrix 分解来提取)
- 框架 1-> 框架 2 : R12, T12
问题是 T01 和 T12 被归一化,因此它们的幅度为 1。但是,实际上,T01 幅度可能是 T12 的两倍。
如何恢复 T01 和 T12 之间的相对震级?
PS我不想知道究竟是T01还是T12。我只想知道|T01| = 2 * |T12|。
我认为这是可能的,因为单目 SLAM 或 SFM 算法已经存在并且运行良好。所以,应该有一些方法可以做到这一点。
numpy - Scikit-learn NMF 返回 NAN 值
我正在使用 6650254x5650 稀疏矩阵,其值采用 numpy.float64 格式。
我正在使用 scikit-learn 的 NMF 实现,如下所示
似乎更多的n_components
我得到W
了所有元素都在的矩阵NaN
。例如 ifn_components
大于 7 - 但它在n_components
19 时有效!我想知道是什么导致了这种情况,还有哪些其他库可以有效地处理如此大的矩阵,我可以对其进行基准测试。
更新 如果其他人有类似的问题,同时,我正在使用隐式库
python - 如何计算python中相关矩阵的方差分解比例?
我正在寻找在我的输入矩阵 X 中识别共线变量。我能够获得一些指标,如 VIF 分数、条件数、条件指数,但无法获得方差分解比例。有人可以帮助我如何计算python中相关矩阵的方差分解比例吗?
python - 通过 PyTorch 中的 Cholesky 分解计算行列式
我一直在尝试通过 PyTorch 中的 Cholesky 分解来计算 2x2 矩阵的行列式,它不会给出与 Numpy 相同的数字,我不知道为什么。根据我的理解,您可以通过将正定矩阵分解为下三角矩阵及其转置来计算正定矩阵的行列式,即 M = LL^T。
然后根据行列式定律,M 的行列式等于 L 的行列式乘以 L^T 的行列式。在下三角矩阵的情况下,这只是对角线的乘积。因此,M 等于 L 的对角线乘以 L^T 的对角线的乘积。
但是,当我在 PyTorch 中实现它时,我得到了错误的值。我在下面复制了一个示例代码。
一个示例输出将是这样的,
这是什么错误?为什么这两种方法有区别?
r - 从 R 中的 SVD 手动计算伪逆看起来不对?
我不确定为什么这会给我不同的答案?伪逆的公式是我在网上看到的 VDU^T。
computer-vision - 单应矩阵分解——从右手坐标系到左手坐标系的转换
如何将右手坐标系中的单应矩阵分解(即 x 点向右,y 点向下,z 点进入场景)转换为左手坐标系(y 点向上)?
给定一个单应性 H 和一个相机矩阵 K,以及它们对右手坐标系计算的旋转 (R)、平移 (T) 和法线 (N) 的分解,如何转换分解 (R, T, N)所以它会适合上面描述的左手坐标系?
提前致谢。
matrix - 列是第一个 $p$ 左奇异向量的矩阵
假设我有一个$m \times n$矩阵$A$。当我找到它的 SVD 时,我得到$p$主导奇异值。如何获得$m \times p$矩阵,其列是$A$的第一个$p$左奇异向量?
matrix - 如何分解二维变换矩阵以及如何将它们复合回来
我正在写一些矢量形状变换演示,但我被困住了:
有一个从某种形状获得的变换矩阵数据:
然后我使用一种decomposeMatrix
方法(来自这里:https ://frederic-wang.fr/decomposition-of-2d-transform-matrices.html )将矩阵拆分为translation
, scale
, rotation
, skew
, 我将这些值记录在一个新shape
类中,当我刷新画布时,这个shape
实例将调用一个方法来通过这些姿势值计算其局部矩阵,我认为它会返回一个与之前分解的矩阵几乎相同的矩阵,但不是。
从矩阵中我得到了数据:
我将这些数据与“https://frederic-wang.fr/decomposition-of-2d-transform-matrices.html”网页进行了比较,它们是相同的,并且网页演示可以得到我期望的正确图像姿势结果。
所以我认为也许我的矩阵乘法方法是错误的?
矩阵连接顺序为:
而且我尝试了其他 concat order ,例如 like T * R * Sc * Sk
,但我仍然无法得到正确的结果。
亲爱的家人,你能帮我解决这个问题吗?比心!