【Python】基于numpy求矩阵中椭圆形范围内最大值及其行列号

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Python 基于numpy求矩阵中椭圆形范围内最大值及其行列号

  • 前言
  • 计算函数
    • 代码


前言

在矩阵中给定椭圆范围内,求最大矩阵值,及其在矩阵中的行列号
注:矩阵中先行号后列号,图形中先x(列表示)后y(行表示)

计算函数

输入椭圆长短半轴及中心点坐标(均为整数)及矩阵M
输出椭圆内最大值及其行列号

注:x跟a, y跟b,

椭圆方程可参考网址:

https://wuchenwei.blog.csdn.net/article/details/116172359

代码

求最值的代码如下(示例):

import numpy as np
def searchin1(ra, rb, x0, y0, M):
    D = M[y0-rb:y0+rb, x0-ra:x0+ra]
    while 1:
        Dmax = np.max(D)
        Dmaxcoord = np.where(D == np.max(D))
        #print(Dmaxcoord,np.size(Dmaxcoord[0]))
        itern = np.size(Dmaxcoord[0])
        height = 0
        if itern > 1: # 若多点同时取到最大值,计算每一个点:
            for i in range(itern):
                ymax = Dmaxcoord[0][i] + y0 - rb - 1
                xmax = Dmaxcoord[1][i] + x0 - ra - 1
                veri = (xmax-x0)^2 * rb^2 + (ymax-y0)^2 * ra^2 - ra^2 * rb^2
                if veri <= 0:
                    height = Dmax
                    break
                else:
                    D[Dmaxcoord[0][i],Dmaxcoord[1][i]]=0
        else:  # 若仅一点取到最大值,计算:
            ymax = Dmaxcoord[0] + y0 - rb - 1
            xmax = Dmaxcoord[1] + x0 - ra - 1
            veri = (xmax - x0) ^ 2 * rb ^ 2 + (ymax - y0) ^ 2 * ra ^ 2 - ra ^ 2 * rb ^ 2
            if veri <= 0:
                height = Dmax
                break
            else:
                D[Dmaxcoord[0], Dmaxcoord[1]] = 0
        if height != 0:
            break
    highest_point = (ymax+1, xmax+1)

    return height, highest_point

欢迎在评论区讨论或补充说明。

你可能感兴趣的:(python,numpy,矩阵)