svd 订阅
SVD是苏联德拉贡诺夫狙击步枪的英文缩写,前苏联军队在1963年选中了由德拉贡诺夫设计的狙击步枪代替莫辛-纳甘狙击步枪,称为CBД(Снайперская Винтовка Драгунова)狙击步枪,英文为SVD(Snayperskaya Vinyovka Dragunov),通过进一步的改进后,在1967年开始装备部队。除前苏/俄外,埃及、南斯拉夫、罗马尼亚等国家的军队也采用和生产SVD。中国仿制的SVD为1979年定型的79式狙击步枪及改进型85式狙击步枪。 展开全文
SVD是苏联德拉贡诺夫狙击步枪的英文缩写,前苏联军队在1963年选中了由德拉贡诺夫设计的狙击步枪代替莫辛-纳甘狙击步枪,称为CBД(Снайперская Винтовка Драгунова)狙击步枪,英文为SVD(Snayperskaya Vinyovka Dragunov),通过进一步的改进后,在1967年开始装备部队。除前苏/俄外,埃及、南斯拉夫、罗马尼亚等国家的军队也采用和生产SVD。中国仿制的SVD为1979年定型的79式狙击步枪及改进型85式狙击步枪。
信息
口    径
7.62 mm
瞄准镜
PSO-1型
夜视瞄准镜
300 m
光学瞄准镜
1300 m
弹    药
7.62x54mmR步枪弹
有效射程
800m
产    地
苏维埃社会主义共和国联盟
枪管长
620 mm
弹头初速
828 m/s
中文名
德拉贡诺夫狙击步枪
自动方式
导气式
外文名
SVD Sniper Rifle
闭锁方式
枪机回转闭锁
全    长
1220 mm
弹匣容量
10发
机械瞄具
1200 m
最大杀伤射程
1300 m
SVD发明背景
德拉贡诺夫SVD的设计者其本身就是一个优秀的射击选手,在射击比赛中取得过很好的成绩。1958年,德拉贡诺夫接受了一个挑战————设计一种半自动的狙击步枪,他运用射手的的灵感,解决了提高设计精度的诸多难题。他的SVD最终击败了包括卡拉什尼科夫在内的其他竞争者,如今“德拉贡诺夫”已经成为苏/俄制狙击步枪的代名词。 [1] 
收起全文
精华内容
下载资源
问答
  • SVD

    2018-11-21 19:48:16
  • svd

    2021-04-13 09:15:43
    SVD 关于SVD的学习与理解 0.线代知识点回顾 1.初步认识SVD 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统...

    SVD

    关于SVD的学习与理解:

    0.线代知识点回顾


    在这里插入图片描述


    1.初步认识SVD

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,SVD在数据压缩(如PCA)、推荐算法、矩阵补全、潜在语义索引(LSI)等领域都有着广泛的应用,这里将详细介绍基于SVD的推荐引擎实现。推荐系统存在于我们生活的各个角落,比如淘宝会给我们推荐我们可能感兴趣的物品,网易云音乐有每日推荐的20首歌,大众点评也会给我们推荐餐厅等。相关的推荐算法有基于内容推荐、协同过滤、关联规则、混合推荐等等。

    • 优点:简化数据,去除噪声,提高算法结果
    • 缺点:数据的转换难以理解
    • 适用数据类型:数值型数据

    2.奇异值分解的定义及例子

    1.引理

    在这里插入图片描述

    2.概述

    在这里插入图片描述

    3.例子

    SVD的定义

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1. SVD计算举例

    SVD计算举例

    在这里插入图片描述

    在这里插入图片描述

    用python里的numpy库实现

    算法代码

    在这里插入图片描述

    import numpy as np
    # 导入所有numpy里的函数
    # from numpy import * 导入所有numpy里的函数
    data = np.mat([[1, 1, 1, 0, 0], [2, 2, 2, 0, 0], [1, 1, 1, 0, 0], [5, 5, 5, 2, 2]])
    # 利用mat函数构建一个4x5的矩阵
    U, Sigma, VT = np.linalg.svd(data)
    # 调用linalg中的svd函数实现奇异值分解
    # U 表示左奇异向量,VT表示右奇异向量
    # Sigma 表示奇异矩阵,为了节省空间numpy只返回奇异值
    # 该函数的返回值位U,Sigma ,VT
    print('U=', U)
    print('Sigma=', Sigma)
    print('VT=', VT)
    

    运行结果

    在这里插入图片描述

    重构过程

    由上图可知Sigma的值中,前两个比后面两个大了很多,我们可以将最后两个值去掉,则原始数据集就可以用如下结果来近似:
    在这里插入图片描述

    在这里插入图片描述

    # 重构
    sig2 = np.mat([[Sigma[0],0],[0,Sigma[1]]])
    # 取前俩个较大的奇异值来近似矩阵
    data2 = U[:,:2]*sig2*VT[:2,:]
    # 矩阵分解的逆过程
    print('data2 = ',data2)
    

    运行结果

    在这里插入图片描述

    (补充:确定要保留的奇异值的数目有很多启发式的策略,其中一个做法就是保留矩阵中90%的能量信息,先将所有的奇异值求其平方和计算出总能量信息,再按照从大到小的顺序将奇异值的平方和累加到大于等于总值的90%为止。举个例子,比如某矩阵分解后得到10个奇异值,这些奇异值的总平方和为500,500*90%=450,则需要累加的奇异值能量和至少为450。按顺序累加,前3个奇异值平方和为100,前5个奇异值的平方为400,前6个平方和为460,则经过计算,重构矩阵的时候,取前6个奇异值。

    函数说明

    mat函数
    将输入解释为矩阵
    语法:numpy.mat(data, dtype=None)
    等价于matrix(data, copy=False)

    在经过一个星期的四处搜索,囫囵吞枣之后
    仅仅接触到了svd的冰山一角
    上面是我目前对svd的浅薄理解‘’

    end

    以上内容来源于参考文献,仅供学术参考
    参考文献:
    推荐系统中SVD算法详解
    https://blog.csdn.net/guoxinian/article/details/62898742
    SVD算法理解
    https://blog.csdn.net/weixin_39594447/article/details/88585973
    Python AI 教学|SVD(Singular Value Decomposition)算法及应用https://cloud.tencent.com/developer/article/1523156

    展开全文
  • SVD

    2008-01-07 10:53:00
    SVD对实数浮点矩阵进行奇异值分解 void cvSVD( CvArr* A, CvArr* W, CvArr* U=NULL, CvArr* V=NULL, int flags=0 );A M×N 的输入矩阵 W 结果奇异值矩阵 (M×N 或者 N×N) 或者 向量 (N×1). U 可选的左部正交矩阵 ...

    SVD

    对实数浮点矩阵进行奇异值分解

    void cvSVD( CvArr* A, CvArr* W, CvArr* U=NULL, CvArr* V=NULL, int flags=0 );
    
    A
    M×N 的输入矩阵
    W
    结果奇异值矩阵 (M×N 或者 N×N) 或者 向量 (N×1).
    U
    可选的左部正交矩阵 (M×M or M×N). 如果 CV_SVD_U_T 被指定, 应该交换上面所说的行与列的数目。
    V
    可选右部正交矩阵(N×N)
    flags
    操作标志; 可以是 0 或者下面的值的组合:
    • CV_SVD_MODIFY_A 通过操作可以修改矩阵 src1 。这样处理速度会比较快。
    • CV_SVD_U_T 意味着会返回转置矩阵 U ,指定这个标志将加快处理速度。
    • CV_SVD_V_T 意味着会返回转置矩阵 V ,指定这个标志将加快处理速度。

    函数 cvSVD 将矩阵 A 分解成一个对角线矩阵和两个正交矩阵的乘积:

    /mathbf{/it A=U W V^T}

    这里 W 是一个奇异值的对角线矩阵,它可以被编码成奇异值的一维向量,U 和 V 也是一样。 所有的奇异值都是非负的并按降序存储。(U 和 V 也相应的存储)。

    SVD 算法在数值处理上已经很稳定,它的典型应用包括:

    • 当 A 是一个方阵、对称阵和正矩阵时精确的求解特征值问题,例如, 当 A 时一个协方差矩阵时。在这种情况下 W 将是一个特征值的的向量,并且 U=V是矩阵的特征向量(因此,当需要计算特征向量时 U 和 V 只需要计算其中一个就可以了) 。
    • 精确的求解病态线性系统。
    • 超定线性系统的最小二乘求解。上一个问题和这个问题都可以用指定 CV_SVD 的 cvSolve 方法。
    • 精确计算矩阵的不同特征,如秩(非零奇异值的数目), 条件数(最大奇异值和最小奇异值的比例), 行列式值(行列式的绝对值等于奇异值的乘积).上述的所有这些值都不要求计算矩阵 U 和 V 。

    SVBkSb

    奇异值回代算法(back substitution)

    void  cvSVBkSb( const CvArr* W, const CvArr* U, const CvArr* V,
                    const CvArr* B, CvArr* X, int flags );
    
    W
    奇异值矩阵或者向量
    U
    左正交矩阵 (可能是转置的)
    V
    右正交矩阵 (可能是转置的)
    B
    原始矩阵 A 的伪逆的乘法矩阵。这个是可选参数。如果它被省略则假定它是一个适当大小的单位矩阵(因此 x 将是 A 的伪逆的重建).。
    X
    目标矩阵: 奇异值回代算法的结果
    flags
    操作标志, 和刚刚讨论的 cvSVD 的标志一样。

    函数 cvSVBkSb 为被分解的矩阵 A 和矩阵 B 计算回代逆(back substitution) (参见 cvSVD 说明) :

    X=V*W-1*UT*B

    这里

    W-1(i,i)=1/W(i,i) 如果 W(i,i) > epsilon•sumiW(i,i),
    否则:0.

    epsilon 是一个依赖于矩阵数据类型的的很小的数。该函数和 cvSVD 函数被用来执行 cvInvert 和 cvSolve, 用这些函数 (svd & bksb)的原因是初级函数(low-level) 函数可以避免高级函数 (inv & solve) 计算中内部分配的临时矩阵。  

    展开全文
  • python SVD分解求变换矩阵

    万次阅读 2021-03-25 20:31:24
    python SVD分解求变换矩阵

    一、算法原理

    1、计算流程

    在这里插入图片描述

    1、SVD分解求变换矩阵的详细推导过程:SVD求解3D-3D位姿估计
    2、以下示例代码,使用pcl::registration::TransformationEstimationSVD类中的奇异矩阵分解来求变换矩阵,输入的是同名点坐标输出的是变换矩阵,其详细计算过程如下。

    2、详细过程

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3、参考文献

    [1]刘毅. 结合Kinect的双目视觉场景三维重建[D].电子科技大学,2016.

    二、代码实现

    from numpy import *
    import matplotlib.pyplot as plt
    
    
    def rigid_transform_3D(A, B):
        assert len(A) == len(B)
        N = A.shape[0]
        mu_A = mean(A, axis=0)  # 计算点集A的质心
        mu_B = mean(B, axis=0)  # 计算点集B的质心
    
        AA = A - tile(mu_A, (N, 1))  # 去均值
        BB = B - tile(mu_B, (N, 1))
        H = transpose(AA) * BB  # 计算协方差矩阵
    
        U, S, Vt = linalg.svd(H)  # SVD分解,求解R
        R = Vt.T * U.T
    
        if linalg.det(R) < 0:
            print("Reflection detected")
            Vt[2, :] *= -1
            R = Vt.T * U.T
    
        t = -R * mu_A.T + mu_B.T  # 计算最佳的平移t
    
        return R, t
    
    
    if __name__ == '__main__':
    
        R = mat(random.rand(3, 3))  # 随机生成矩阵R
        t = mat(random.rand(3, 1))  # 随机生成向量t
    
        U, S, Vt = linalg.svd(R)
        R = U*Vt
        if linalg.det(R) < 0:
            Vt[2, :] *= -1
            R = U*Vt
    
        n = 10
    
        A = mat(random.rand(n, 3))  # 随机生成点集A
        B = R*A.T + tile(t, (1, n))  # 变换得到点集B
        B = B.T
    
        ret_R, ret_t = rigid_transform_3D(A, B)  # SVD分解计算变换矩阵
        A2 = (ret_R*A.T) + tile(ret_t, (1, n))
        A2 = A2.T
    # 与刚开始随机生成的变换矩阵进行比较,计算误差。
        err = A2-B
    
        err = multiply(err, err)
        err = sum(err)
        rmse = sqrt(err/n)
    
        print("点集 A2")
        print(A2)
        print("")
    
        print("点集 B")
        print(B)
        print("")
        print(rmse)
        fig = plt.figure()
        ax = fig.add_subplot(111, projection='3d')
        ax.scatter(A[:, 0], A[:, 1], A[:, 2], c='g', s=100, marker='.')
        ax.scatter(B[:, 0], B[:, 1], B[:, 2], c='r', s=100, marker='.')
        ax.scatter(A2[:, 0], A2[:, 1], A2[:, 2], c='b', s=100, marker='o')
        plt.legend()
        plt.show()
    
    

    三、结果展示

    在这里插入图片描述

    四、参考链接

    [1] PCL SVD分解求变换矩阵
    [2] 利用SVD求得两个对应点集合的旋转矩阵R和转移矩阵t的数学推导
    [3] 计算两个对应点集之间的旋转矩阵R和转移矩阵T

    展开全文
  • SVD export

    2020-12-04 19:52:50
    <div><p>SVD format is used among different ARM microcontrollers for describing the chip peripherals. Peripheral descriptions in this format can also be used to generate Rust bindings with ...
  • SVD分解

    2021-02-03 17:15:31
    SVD分解 奇异值分解(SVD SVD(奇异值分解)小结
  • 机器学习实战——SVD(奇异值分解)

    万次阅读 多人点赞 2018-09-03 16:19:52
    与PCA一样的学习过程,在学习SVD时同样补习了很多的基础知识,现在已经大致知道了PCA的应用原理,SVD个人感觉相对要难一点,但主要步骤还是能勉强理解,所以这里将书本上的知识和个人的理解做一个记录。主要关于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,634
精华内容 3,453
关键字:

svd