标签: svd

通过SVD从基本矩阵中提取翻译的正确方法

我校准了相机并找到了内在参数(K).我也计算了基本矩阵(F).

现在E = K_T*F*K. 到现在为止还挺好.

现在我们将基本矩阵(E)传递给SVD,使用分解值(U,W,V)来提取旋转和平移:

 essentialMatrix = K.Transpose().Mul(fund).Mul(K);
 CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)

**问题)此时,已经提出了两种方法,并且让我感到困惑的是哪一种方法确实给出了正确的答案 - 特别是对于翻译:

首先输入链接描述,作者建议计算R,T如下:

在此输入图像描述

但在第二种方法[ http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf]中,作者为T提供了另一个公式,即+ U,-U,如下所示:

在此输入图像描述

我正在使用openCv库在C#.Net上实现它.谁知道哪个翻译公式是正确的?

opencv svd emgucv opencvsharp

8
推荐指数
1
解决办法
1万
查看次数

CPU和GPU的SVD速度

我正在测试svd,Matlab R2014a似乎没有CPUvs GPU加速.我正在使用一张GTX 460卡片和一张卡片Core 2 duo E8500.

这是我的代码:

%test SVD
n=10000;
%host
Mh= rand(n,1000);
tic
%[Uh,Sh,Vh]= svd(Mh);
svd(Mh);
toc
%device
Md = gpuArray.rand(n,1000);
tic
%[Ud,Sd,Vd]= svd(Md);
svd(Md);
toc
Run Code Online (Sandbox Code Playgroud)

此外,运行时间与运行不同,但CPUGPU版本大致相同.为什么没有加速?

这是一些测试

for i=1:10
    clear;
    m= 10000;
    n= 100;
    %host
    Mh= rand(m,n);
    tic
    [Uh,Sh,Vh]= svd(Mh);
    toc
    %device
    Md = gpuArray.rand(m,n);
    tic
    [Ud,Sd,Vd]= svd(Md);
    toc
end

>> test_gpu_svd
Elapsed time is 43.124130 seconds.
Elapsed time is 43.842277 seconds. …
Run Code Online (Sandbox Code Playgroud)

matlab cuda matrix svd arrayfire

8
推荐指数
2
解决办法
5128
查看次数

使用SVD解决Ax = b有什么好处

我有一个线性方程,如

Ax=b
Run Code Online (Sandbox Code Playgroud)

其中A是满级矩阵,其大小是512x512.b是一个矢量512x1.x是未知的矢量.我想找到x,因此,我有一些选择这样做

1.使用正常的方式

inv(A)*b
Run Code Online (Sandbox Code Playgroud)

2.使用SVD(奇异值分解)

[U S V]=svd(A);

x = V*(diag(diag(S).^-1)*(U.'*b))
Run Code Online (Sandbox Code Playgroud)

两种方法都给出了相同的结果.那么,使用SVD解决的好处是什么Ax=b,特别是在A2D矩阵的情况下呢?

matlab image-processing linear-algebra svd

8
推荐指数
2
解决办法
5366
查看次数

如何生成条目统一的 Rank 5 矩阵?

我想在 numpy 中生成一个 5 级 100x600 矩阵,其中所有条目均从 np.random.uniform(0, 20) 采样,以便所有条目将均匀分布在 [0, 20) 之间。在 python 中这样做的最佳方法是什么?

我看到这里有一种受 SVD 启发的方法(https://math.stackexchange.com/questions/3567510/how-to-generate-a-rank-r-matrix-with-entries-uniform),但是我不知道如何编码。我正在寻找这种 SVD 启发方式的工作示例来获取均匀分布的条目。

实际上,我已经通过垂直堆叠五个 20x100 1 阶矩阵,然后打乱垂直索引,成功地编码了 5 阶 100x100 矩阵。然而,生成的 100x100 矩阵没有均匀分布的条目 [0, 20)。

这是我的代码(我最好的尝试):

import numpy as np
def randomMatrix(m, n, p, q):
    # creates an m x n matrix with lower bound p and upper bound q, randomly.
    count = np.random.uniform(p, q, size=(m, n))
    return count

Qs = []
my_rank = 5
for i in range(my_rank):
  L …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix svd matrix-decomposition

8
推荐指数
1
解决办法
482
查看次数

是否可以在mac(64位)上编译svdlibc?

我正在尝试在64位mac上编译svdlibc.运行make文件将返回错误消息:

main.c:1: error: CPU you selected does not support x86-64 instruction set
main.c:1: error: CPU you selected does not support x86-64 instruction set
make: *** [main.o] Error 1
Run Code Online (Sandbox Code Playgroud)

哪个没有多大意义.

make文件是:

# Linux or Windows:
CC = gcc -Wall -O4 -march=i486
# CC = icc -w1 -O3 -march=i486

# Macintosh:
ifeq ($(HOSTTYPE),powerpc)
  CC = cc -pipe -O3 -Wall -fno-common -arch ppc
endif

LIBS=-lm
OBJ=svdlib.o svdutil.o las2.o

svd: Makefile main.o libsvd.a
    ${CC} ${CFLAGS} -o svd main.o libsvd.a ${LIBS}
    mv -f …
Run Code Online (Sandbox Code Playgroud)

c macos svd

7
推荐指数
1
解决办法
939
查看次数

协同过滤的矩阵分解 - 新用户和项目?

我一直在阅读有关使用矩阵分解进行协同过滤的内容,但我似乎找不到一个处理向系统添加新用户或项目或让用户评价新项目的示例.在这些情况下,需要重新计算项目用户矩阵和分解,是否正确?如何在大量用户和项目中表现良好?有办法解决吗?

谢谢

python recommendation-engine machine-learning svd collaborative-filtering

7
推荐指数
1
解决办法
3571
查看次数

基于SVD实现计算酉矩阵行列式

我有一个真正的方阵X,我需要对其执行奇异值分解。现在,执行操作

\n

X=USV^T

\n

由于 U 和 V 是正交的,我们知道det(X)=\xc2\xb1det(S)det(S)是非负的,因为奇异值是非负的。

\n

U现在,我需要知道和的行列式的符号V(当然,这与知道行列式相同)。然而,这种天真的做法让我付出了代价2 O(N^3)

\n

我想知道是否有人知道一种方法

\n
    \n
  1. U将和 的行列式的符号推断为或Python 中类似库V的 SVD 实现的副积,而无需调用和。numpyscipydet(U)det(V)
  2. \n
  3. det(U)基于正交矩阵的事实,计算正交矩阵的行列式,该矩阵比 的默认实现更快U/V
  4. \n
\n

python optimization numpy scipy svd

7
推荐指数
0
解决办法
278
查看次数

使用CUDA并行实现多个SVD

我是使用GPU进行并行编程的新手,所以如果问题广泛或模糊,我会道歉.我知道CULA库中有一些并行的SVD功能,但是如果我有大量相对较小的矩阵来分解,应该采取什么策略呢?例如,我有n尺寸矩阵d,n大而d小.如何并行化这个过程?谁能给我一个提示?

parallel-processing cuda gpu svd

6
推荐指数
2
解决办法
4642
查看次数

术语文档矩阵中的SVD不能给出我想要的值

我试图在一篇名为"对LSA的介绍"的论文中复制一个例子: 对LSA的介绍

在示例中,他们具有以下术语 - 文档矩阵:

在此输入图像描述

然后他们应用SVD并获得以下内容:

在此输入图像描述

试图复制这个,我写了以下R代码:

library(lsa); library(tm)

d1 = "Human machine interface for ABC computer applications"
d2 = "A survey of user opinion of computer system response time"
d3 = "The EPS user interface management system"
d4 = "System and human system engineering testing of EPS"
d5 <- "Relation of user perceived response time to error measurement"
d6 <- "The generation of random, binary, ordered trees"
d7 <- "The intersection graph of paths in trees"
d8 <- "Graph …
Run Code Online (Sandbox Code Playgroud)

r matrix text-mining svd lsa

6
推荐指数
1
解决办法
1276
查看次数

如何解释奇异值分解结果(Python 3)?

我正在尝试学习如何减少数据集中的维数.我遇到了一些关于Principle Component Analysis和的教程Singular Value Decomposition.我知道它需要最大方差的维度并且顺序地折叠下一个最高方差的维度(过度简化).

我对如何解释输出矩阵很困惑.我查看了文档,但没有多大帮助.我遵循了一些教程,并不太确定所得到的矩阵究竟是什么.我提供了一些代码来了解数据集(sklearn.datasets)中每个变量的分布.

我的初始输入阵列是(n x m)矩阵n samplesm attributes.我可以做PC1与PC2的常见PCA图,但我怎么知道每台PC代表哪个尺寸?

对不起,如果这是一个基本问题.很多资源都非常重,我很好,但更直观的答案会很有用.不,我已经看到有关如何根据原始标记数据解释输出的讨论.

我打开使用sklearndecomposition.PCA

#Singular Value Decomposition
U, s, V = np.linalg.svd(X, full_matrices=True)
print(U.shape, s.shape, V.shape, sep="\n")
(442, 442)
(10,)
(10, 10)
Run Code Online (Sandbox Code Playgroud)

python machine-learning linear-algebra svd pca

6
推荐指数
1
解决办法
1610
查看次数