zoukankan      html  css  js  c++  java
  • 20190110-用笨办法找到二维矩阵的鞍点

    1:找出一个多维数组的鞍点,即该元素在该行上最大,在该列上最小,也可能没有鞍点

    a = [
        [1,2,3,4],
        [4,5,6,2],
        [7,0,5,2],
        [11,10,7,9]]

    解题思路如下:

    step1:先找出每行的最大值,及其index,输出最大值,即所在行和列作为要给list存如result列表中,函数写法如下:

    def find_saddle_max_point(s):
        result =[]
        #用result存储每行最大值以及其index
        for i in range(len(s)):
            #遍历次数,即一共有多少个行,如例子中一共有4行,该值等于a的元素个数
            max =s[i][0]
    #设定每行的最大值为第一个
            location =[]
    #新建一个location列表来存储该值在外层的index和内层的index
            index=0
    #设定最大值所在的列的index值为0
            for j in range(len(s[i])):           
                #遍历每行的每个值
                if s[i][j]>max:
                    max = s[i][j]
                    index =j
    #找出最大值以及最大值所在列,即j的值
            location.append(i)
            location.append(index)
    #存入横向列表坐标和纵向坐标值
            result.append((max,location))
    #将最大值及所在的location(包括横向坐标和纵向坐标)存如result中
        return result
    print(find_saddle_max_point(a))

    step2:找出二维矩阵每列最小值,函数写法同step1

    def find_saddle_min_point(s):
        result =[]
        for i in range(len(s[0])):
            #遍历列的次数,如a有4列,列的遍历次数等于a的嵌套列表的长度
            min = s[0][i]
    #设定最小值为每列第一个
            location=[]
            index=0
            for j in range(len(s)):
                #遍历每列的值
                if s[j][i]<min:
                    min =s[j][i]
                    index = j
            location.append(index)
            location.append(i)
    #将每列的最小值所在的index存如location列表中
            result.append((min,location))
    #将每列的最小值以及所在的location存如result中
        return result
    print(find_saddle_min_point(a))

    step3:遍历step1和step2生成的列表,如果有最大值和最小值重复,并且index一样,即2个列表中有重复元素则为二维数组的鞍点

    #step3:如果最小值与最大值重复,并且其index一样,则为鞍点
    def find_saddle(a):
        list1 = find_saddle_max_point(a)
        list2 = find_saddle_min_point(a)
        for i in list1:
            if i in list2:
                return i
        else:
            return False
    print(find_saddle(a))

     

  • 相关阅读:
    又见Python<4>:Pandas之DataFrame对象的使用
    又见Python<3>:Pandas之Series对象的使用
    使用tdload工具将本地数据导入到Teradata数据库中
    解决ubuntu系统root用户下Chrome无法启动问题
    又见Python<2>:如何安装第三方库(Windows)
    又见Python<1>:使用Anaconda搭建Python开发环境(Windows7)
    数据仓库原理<4>:联机分析处理(OLAP)
    数据仓库原理<3>:数据仓库与ODS
    配置hibernate,Struts。文件
    jQuery +ajax +json+实现分页
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10252327.html
Copyright © 2011-2022 走看看