zoukankan      html  css  js  c++  java
  • 第十八天学习进度--计算机语言函数提取算法

    前几天在写曲线函数的拟合,参照前几天的编写过程与思路,今天突然有了一个大胆的想法,既然普通的函数能够通过一堆数列来推断出原来数列的公式,那么如果是计算机的函数呢,是否能通过提供几个原本传递过去的参数还有他们对应的最终结果,最终得到一个传递函数转化为最终结果的这样一个函数。

    比如X,Y,Z是传递过去给计算机函数的参数,已知这些参数经过某个过程处理之后得到结果A,B,C

    现在提供多个X,Y,Z和A,B,C的对应关系 ,若能得到 F(X,Y,Z)-->A,B,C的映射的话,那么传递过去任何数,都会经过F(X,Y,Z)-->A,B,C的处理

    通俗点讲就是提供多个原始数据和最终数据,然后分析得到从原始数据转换到最终数据的函数

    比如提供多个随机打乱的数组

    [[3,2,1],[2,3,4],[1,3,2],[4,3,6],[9,5,6],[9,3,5]]

    然后再提供与之对应的排序好的数组

    [[1,2,3],[2,3,4],[1,2,3],[3,4,6],[5,6,9],[3,5,9]]

    通过提供的原始数据和最终数据,可以得到 从小到大排序这样一个函数

    有了上述的思路之后,我们开始我们的编程过程。

    在python中,sklearn已经为我们提供了对应的多元线性的函数拟合方法(但是sklearn中的多元线性拟合的最小二乘法和梯度下降具有局限性,只有实现多元非线性拟合的时候,才能达到真正的函数拟合)

    因此我们可以直接调用对应的方法来找到对应的关系

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #@Time  : 2020/7/25 16:01
    #@Author: hdq
    #@File  : funcgetter.py
    
    
    #1 结果反推结果规律
    #2 长度为参数
    #第一步,长度+内值 若全相同 规律寻找,不相同,函数对应(简单情况)
    #3 相关参数寻找(预:归类算法,属于长度不一的)
    #3.1 (相对位置,值)
    
    #长,a,b,c,d(,e)  输出数组长
    #计算时的位置是相对位置
    
    #先将问题简化
    #如果输入大小是固定大小
    #多关系递归
    
    import collections
    from sklearn import linear_model
    
    #取数组第N位
    def point_num(numlist,point):
        return sorted(numlist)[point]
    
    #取列表中最接近的数
    def get_near(numlist,nearnum):
        mlist=[]
        for one in numlist:
            mlist.append(abs(one-nearnum))
        minnum=min(mlist)
        for one in numlist:
            if(abs(one-nearnum)==minnum):
                return one
        return 0
    
    # #获得最根本关系列表,relation是二数间进行的操作
    # def get_root(numlist,relation):
    
    
    #获得n个列表中相同的元素
    def extra_same_elem(lsts):
        iset = set(lsts[0])
        for li in lsts[1:]:
            s = set(li)
            iset = iset.intersection(s)
        return list(iset)
    
    
    #判断%n的元素相同
    def same(numlist,percent=100):
        trie = collections.defaultdict(set)
        for one in numlist:
            trie[one].add(one)
        maxpercent=0
        numlen=len(numlist)
        for one in set(numlist):
            nowpercent=len(trie[one])/numlen
            if(nowpercent>maxpercent):
                maxpercent=nowpercent
        if(maxpercent>=percent):
            return True
        return False
    
    #函数提取
    def func_create(xlist,ylist):
        model = linear_model.LinearRegression()
        model.fit(xlist, ylist)
        return model
    
    #函数生成 inxlist:结果数据是否完全在原数据里面
    def func_general(model,xlist,inxlist=True):
    numlist=[]
    for i,one in enumerate(model.predict(xlist)):
    result=[]
    try:
    for two in one:
    if inxlist:
    info=get_near(xlist[i],two)
    else:
    info=two
    result.append(info)
    numlist.append(result)
    except:
    numlist.append(one)
    return numlist

    然后通过输入上面的数据,来得到一个计算机的函数,排序算法

    model=func_create([[3,2,1],[2,3,4],[1,3,2],[4,3,6],[9,5,6],[9,3,5]],
                      [[1,2,3],[2,3,4],[1,2,3],[3,4,6],[5,6,9],[3,5,9]])

    通过上面的数据,我们已经得到一个排序函数的模型,下面我们输入任意数,让其进行排序,来测试排序功能

    print(func_general(model,[[4,3,2],[7,3,9],[5,4,1]]))

     可以看到,函数的排序输出结果完全正确,所以我们通过数据与结果,得到了排序的这个计算机函数

  • 相关阅读:
    上拉、下拉无限滚动组件-pc端
    elementui 表格应用1:多选+搜索框+保持选中状态
    uniapp初识笔记3
    uniapp 动态获取接口域名
    uniapp初识笔记2
    uniapp上传图片、视频到oss
    uniapp初识笔记
    vue登录页作为modal全局使用
    vue hash模式下微信分享,实现参数传递
    Vscode以管理员身份运行powershell
  • 原文地址:https://www.cnblogs.com/halone/p/13387368.html
Copyright © 2011-2022 走看看