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]]))

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

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/halone/p/13387368.html
Copyright © 2011-2022 走看看