精华内容
下载资源
问答
  • 今天小编就为大家分享一篇Python 求数组局部最大值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 大多数连续时间动力系统的分岔图都是基于对局部最大值的分析。 事实上,我们还必须考虑最小值。 我们提出了一个应用于 Rössler 系统的程序。 但它适用于任何其他此类模型。
  • 该功能非常易于使用。 一个可调参数使其能够适应非常不同的应用。 它应该适用于任何 Matlab 版本。
  • 此函数使用矢量化方法来确定分段样条拟合中存在的最大值和最小值的位置。 用于确定最大值和最小值的 matlab 内置函数,通过区分 pp 样条并找到其零点(使用样条工具箱)非常慢,并在 m 文件末尾作为注释给出以供参考...
  • 在向量中寻找局部最小值或最大值的函数集,在向量中找到最接近某个值的点,以及清除所有内容的小函数。
  • 用c++实现遗传算法找函数最大值,初学者写的东西,大神绕路
  • 【Python】求数组局部最大值

    千次阅读 2018-06-19 21:12:26
    局部最大值 给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。规定:在数组边界外的值无穷小。即:A[0]>A[-1],A[N-1] >A[N]。 显然,遍历一遍可以找到全局最大值,而全局最大值显然是...

    求数组局部最大值

    给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。规定:在数组边界外的值无穷小。即:A[0]>A[-1],A[N-1] >A[N]。
    显然,遍历一遍可以找到全局最大值,而全局最大值显然是局部最大值。
    可否有更快的办法?

    算法描述

    使用索引left、right分别指向数组首尾。
    求中点 mid = ( left + right ) / 2
    A[mid]>A[mid+1],丢弃后半段:right=mid
    A[mid+1]>A[mid],丢弃前半段:left=mid+1
    递归直至left==right
    时间复杂度为O(logN)。

    Python代码

    def local_maximum(li):
        if li is None:
            return
        left = 0
        right = len(li) - 1
        while left < right:
            mid = int((left + right) / 2)
            if li[mid] > li[mid + 1]:
                right = mid
            else:
                left = mid + 1
        return li[left]
    
    
    if __name__ == '__main__':
        li = [1, 5, 2, 3, 4, 0]
        result = local_maximum(li)
        print(result)

    输出结果:4

    展开全文
  • 矩阵局部最大值

    千次阅读 2017-11-25 11:50:49
    求矩形的局部最大值:给定m行n列的整数矩阵a如果a的非边界元素a[i][j]大于相邻的上下左右4个元素,那么就称元素a[i][j]是矩阵的局部最大值。要求输入给定矩阵的全部局部极大值及其所在位置。 #include int main()...

    求矩形的局部最大值:给定mn列的整数矩阵a如果a的非边界元素a[i][j]大于相邻的上下左右4个元素,那么就称元素a[i][j]是矩阵的局部最大值。要求输入给定矩阵的全部局部极大值及其所在位置。

    #include <stdio.h>

    int main()

    {

        int i,j,m,n,a[10][10];

        scanf("%d%d",&m,&n);

        for(i=0;i<m;i++)

        {

            for(j=0;j<n;j++)

            {

                scanf("%d",&a[i][j]);

            }

        }

        for(i=0;i<m;i++)

        {

            for(j=0;j<n;j++)

            {

               if(a[i][j]>a[i-1][j]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1])

               {

                   printf("%d %d %d\n",a[i][j],i+1,j+1);

               }

            }

        }

        return 0;

    }

     

    展开全文
  • 请问如果有一个数组,求数组中所有局部最大值的位置,在python中有现成的函数可以用吗? 问题的等价形式就是,假如有下面的波形,如何求出所有峰值的位置(注意不是最高峰,是所有的峰),有现成的函数可以用吗?...
  • 3、 对于2中的结果,寻找其等于True的列与行就是对应的局部最大值坐标 例子如下—齿轮定位: 本打算采用找轮廓算法来确定每个零件的中心和半径,但是由于零件之间由重叠,找轮廓效果见下图 所以笔者采用的...

    首先介绍图像的异或操作,其可以用八个字概括:相同为假,相异为真。
    如下:

    A=array([[ True,  True,  True],
           [ True,  **False**,  True],
           [ True,  True,  True]], dtype=bool)
    B=array([[ True,  True,  True],
           [ True,  **True**,  True],
           [ True,  True,  True]], dtype=bool)
    A^B=array([[False, False, False],
           [False, **True**, False],
           [False, False, False]], dtype=bool)
    

    在找图像局部最大值的时候,可分为以下几步:
    1、 对图像进行最大值滤波(scipy 中的函数有最大值滤波函数),然后使得其等于原图,其得到一个bool 类型的矩阵。此时,最大值邻域都是True—-local_maxinum
    2、 要想得到peaks,还得从以上操作中移除图像背景,即是利用异或操作,background^ local_maxinum
    3、 对于2中的结果,寻找其等于True的列与行就是对应的局部最大值坐标
    例子如下—齿轮定位:
    本打算采用找轮廓算法来确定每个零件的中心和半径,但是由于零件之间由重叠,找轮廓效果见下图
    这里写图片描述
    所以笔者采用的方法是
    1、 二值化(注意反转,齿轮式黑色)

    def process_img(img):
        if img.ndim==3:
            img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        img=cv2.medianBlur(img,3)
        _,thresh=cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
        return thresh

    2、 填洞,注意的是cv2.floodFill()这个mask 的宽高等于binary image 宽高加2

    def fillhole(thresh):
        h,w=thresh.shape[:]
        mask=np.zeros((h+2,w+2),np.uint8)
        holes=cv2.floodFill(thresh.copy(),mask,(0,0),255)
        s=cv2.bitwise_not(holes[1])
        full_thresh=s|thresh
        return full_thresh

    这里写图片描述

    3、 距离变换,也成EDM(距离映射),是指每个像素到背景像素的距离,越亮的地方离背景像素越远。距离变换有很多应用,如骨架提取,半径提取等。

    distance=cv2.distanceTransform(full_threshh,2,5)

    4、 寻找局部最大值,笔者的找局部最大不稳定

    def detect_peaks(img):#2d local maxinum
        neighborhood=generate_binary_structure(2,2)
        local_peaks=maximum_filter(img,footprint=neighborhood)==img
        ## 此时,local_peaks是bool值,False代表局部最大值
        ##但由于背景的存在,必须从local_peaks移除背景
        background=(img==0)
        erode_background=binary_erosion(background,structure=neighborhood,border_value=1)
        peaks=local_peaks^erode_background
        return peaks

    5、 笔者找到局部最大指后(cols,rows),用半径过滤,其半径就是对应距离变换后的值

        peaks=detect_peaks(distance)
        cols_and_rows=[[j,i] for i,j in zip(*np.where(peaks==True))]
        #判断半径
        true_pos=[]
        for t in cols_and_rows:
            if distance[t[1],t[0]]>50:
                true_pos.append(t)
                cv2.putText(im,"pos=(%g,%g),r=%g"%(t[0],t[1],distance[t[1],t[0]]),(t[0],t[1]),cv2.FONT_HERSHEY_SIMPLEX,0.5,[0,0,255],2)

    这里写图片描述

    展开全文
  • 局部最大值

    千次阅读 2016-10-25 22:53:01
     给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。  规定:在数组边界外的值无穷小。 思想  遍历一遍得全局最大值,它显然是局部最大值,但可否有更快的办法?  当然有。  为了解这个...

    本总结是是个人为防止遗忘而作,不得转载和商用。

    题目

             给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。

             规定:在数组边界外的值无穷小。

    思想

             遍历一遍得全局最大值,它显然是局部最大值,但可否有更快的办法?

             当然有。

             为了解这个题,我们做一个定义。

             定义:若子数组Array[from,…,to] 满足Array[from]>Array[from-1]且Array[to]>Array[to+1],则称该数组为“高原数组”。

             于是:如果from和to退化为一个点,那这个点就是局部极大值点。于是我们就不停的切切切把高原数组切成一个点。

    算法描述

             使用索引left、right分别指向数组首尾,根据定义,该数组为高原数组。

                      1,求中点mid=(left+right)/2

                      2,如果A[mid]>A[mid+1],则子数组A[left…mid]为高原数组,因此丢弃后半段,令right=mid

                      3,如果A[mid+1]>A[mid],则子数组A[mid…right]高原数组,因此丢弃前半段,令left=mid+1

             重复上述过程,递归直至left==right

    时间复杂度

             时间复杂度为O(logN)。

    展开全文
  • 运行如下代码,得到下边的图片: import matplotlib.pyplot as plt plt.plot(x) plt.scatter( argrelextrema(x, np.greater), x[argrelextrema(x, np.greater)], c='red' ) 图中所示的红点即为极大。如果要求极小...
  • 算法学习-局部最大值

    千次阅读 2016-11-23 11:49:26
    给定一个无重复元素的数组A[0...N-1],求找到一个该数组的局部最大值 规定:在数组边界外的值无穷小。即A[0]>A[-1],A[N-1]>A[N]。从而可得如下局部最大值的形式化定义: a=one of {a[i]|a[i]>a[i-1]且a[i]>a...
  • 求图像局部最大值

    千次阅读 2014-12-01 11:04:26
    应组长需求,需要得到图像中的局部最大值,他跟我说的思路是用滑动窗口来实现,在每个滑动窗口里面求一个最大值。在opencv里面找了一下,没有现成的函数,就开始打算梯度算子来求,我开始查找sobel算子的东西,找到...
  • scikit-image库--查找局部最大值(十)

    千次阅读 2019-08-13 19:09:27
    最大滤波器用于查找局部最大值。此操作将扩展原始图像,并合并相邻的局部最大值,使其小于扩展的大小。原始图像等于展开图像的位置将作为局部最大值返回。 peak_local_max (image, min_distance=1, threshold_abs=...
  • http://simulations.narod.ru/ 矢量化代码以查找零、局部最大值、局部最小值。 零是信号改变符号时。 最大值是比上一个多然后下一个的元素。 最小值是小于上一个且小于下一个的元素。 运行 zz_test.m 来测试函数。
  • #include<stdio.h> int main() { int i,j,m,n; scanf("%d %d",&m,&n); int a[m][n]; for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); ...a[i-1
  • 求矩阵局部的几个最大值

    千次阅读 2018-05-23 17:19:55
    对矩阵进行处理的时候,有时候需要求局部最大值,但是matlab中的max()函数只能求最大的一个值,并且无法返回最大值所处的位置,为此,本文利用matlab的find和sort函数实现了求矩阵局部最大值。M = rand(9,9); % ...
  • 找出局部有序数组的最大值

    千次阅读 2016-04-24 21:50:03
    题目:将一个有序数组arr[n]的前面一段arr[0…..k]移动到数组的末尾,找出新数组的最大值。比如:int[] arr1 = {1, 5, 10, 20, 25, 30, 35, 50, 60, 70, 80, 100, 120, 150, 200}; int[] arr2 = {5, 10, 20, 25, 30,...
  • 题目 ... 题解 看题目要求是 O(log n),想到每次删一半,但是写完之后才发现并不符合要求。。先将错就错吧,后面有空再完善下。 第一次比较次数为 n/2,第二次比较...所以每次淘汰一半后,最后剩下的是最大值,也就是 Peak
  • 二维数组找最大值

    千次阅读 2018-11-19 20:28:00
    if(a[row][column] [i][j]){ /*找最大值的过程*/ row = i; column = j; } } } for(i = 0; i ; i++){ for(j = 0; j ; j++ ) printf("%2d ", a[i][j]); putchar('\n'); } printf("max = ...
  • 滑动窗口的最大值(思路与实现)

    千次阅读 2018-07-02 22:12:26
    题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 286,012
精华内容 114,404
关键字:

局部最大值