zoukankan      html  css  js  c++  java
  • Go语言 距离矩阵的计算

      在数据分析中,尤其是多元统计分析,距离矩阵的计算无处不在,Go语言计算距离矩阵需要:二元切片计算,和一些向量运算

    计算步骤:

      两个向量(go语言切片),向量做差,向量元素平方和。分别由以下三个函数实现(需要import "math")

    func subtract(v1 []float64, v2 []float64) []float64 {
        var res []float64
        var n int = len(v2)
        for i := 0; i < n; i++ {
            res = append(res, v1[i]-v2[i])
        }
        // fmt.Println(res)
        return res
    }
    
    func square(v []float64) []float64 {
        var res []float64
        var n int = len(v)
        for i := 0; i < n; i++ {
            res = append(res, v[i]*v[i])
        }
        return res
    }
    
    func sum(slice []float64) float64 {
        var result float64 = 0
        for i := 0; i < len(slice); i++ {
            result += slice[i]
        }
        return result
    }

      然后计算距离矩阵,取矩阵中任意两行计算其做差平方和的平方根(向量之间的欧氏距离),两两计算一次。假如矩阵是m行的,会得到m*m个结果,刚好距离矩阵是对角线为0的对称方阵,计算如下:

    func distance(M [][]float64) [][]float64 {
        var m, n int = len(M), len(M[0])
        var dist [][]float64
        for i := 0; i < m; i++ {
            var temp float64 = 0
            var tempSlice []float64
            for j := 0; j < m; j++ {
                temp = sum(square(subtract(M[i], M[j])))
                tempSlice = append(tempSlice, math.Sqrt(temp))
            }
            dist = append(dist, tempSlice)
        }
        return dist
    }

    计算案例:

    Example:主函数中编写如下代码(import "fmt")

            M := [][]float64{
    
                   {4, 2, 8, 7},
    
                   {3, 5, 6, 9},
    
                   {4, 2, 4, 4},
    
            }
    
            var d = distance(M)
    
            fmt.Println(d)

    结果如下:

    [[0 4.242640687119285 5]

    [4.242640687119285 0 6.244997998398398]

    [5 6.244997998398398 0]]

    计算量并不大,自己在纸上计算一下,发现是正确的,那么就没问题

  • 相关阅读:
    JWT认证-插件准备
    drf 框架 三大组件
    drf框架 视图、工具视图、视图集
    drf框架 ModelSerializer
    CentOS6.5 上crontab每天自动备份mysql数据库
    php-GatewayWorker搭建实时聊天室
    Centos6.8实现SVN提交后自动更新目录
    Python在线聊天软件(Tkinter)
    Navicat for MySQL连接mysql数据库时提示错误:Can't connect to MySQL server (10060)
    Ubuntu16下apache2安装ssl阿里云证书
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/14304139.html
Copyright © 2011-2022 走看看