Python求方阵鞍点

该博客讨论了如何在给定的方阵中找到鞍点的问题。鞍点是矩阵中一个元素,其值在同一行中最大但在同一列中最小。通过首先找到每行的最大值及其索引,然后对比这些最大值在对应列中的其他元素,可以确定鞍点。提供的Python代码实现了这一算法,读取矩阵,找出鞍点并输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题分析

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。(题目保证给出的矩阵是方阵,且至多存在一个鞍点)

问题解决

先求每一行的最大值,然后再求每一列的最小值。有个问题:怎么求每一列的最小值呢?

利用所求得的最大值的下标去遍历每一行的中的每一列相同下标的元素,自然就找到每一列了。

def get_andian(n):
    m=0
    juzhen=[]
    while m<n:
        row=list(map(int,input("按行输入,空格隔开:").split(" ")))
        juzhen.append(row)#得到一个二位列表
        m+=1
      
    x=0
    for h in juzhen:
        # print(h)
        key=max(h)#找到一行之中最大元素
        y=h.index(key)#获得最大元素的下标
        #遍历矩阵每一行,找的和key下标相同的元素,然后饿key比较,得出鞍点
        if key<=min([row[h.index(key)] for row in juzhen]):
            print(f"{x}行{y}列")
            print(key)
            return True
        x+=1
    return False

n=int(input("n:"))
flag=get_andian(n)
print(flag)
### Python 中关于鞍点的概念及应用 #### 鞍点定义 在数学分析中,鞍点是指一个多维空间中的特殊点,在该点处梯度为零,但在不同方向上的二阶导数有不同的符号。对于二维数组而言,鞍点是一个位置 (i,j),使得 a[i][j] 是第 i 行的最大值且是第 j 列的最小值[^4]。 #### 查找鞍点的方法 为了找到一个矩阵中的所有鞍点,可以编写如下所示的一个简单算法: ```python def find_saddle_points(matrix): row_maxes = [max(row) for row in matrix] col_mins = [min(col) for col in zip(*matrix)] saddle_points = [] for i, row in enumerate(matrix): for j, val in enumerate(row): if val == row_maxes[i] and val == col_mins[j]: saddle_points.append((i, j)) return saddle_points ``` 此代码片段首先计算每一行的最大值以及每一列的最小值;接着遍历整个矩阵寻找满足条件的位置并将其记录下来作为鞍点。 #### 应用实例 考虑下面这个简单的例子来展示上述方法的应用场景: ```python import numpy as np # 创建随机整数构成的 5x5 矩阵 np.random.seed(0) data = np.random.randint(1, 20, size=(5, 5)) print("原始矩阵:") print(data) saddle_pts = find_saddle_points(data.tolist()) if saddle_pts: print(f"\n发现鞍点位于这些坐标:{saddle_pts}") else: print("\n未发现任何鞍点") ``` 这段脚本会创建一个由随机整数组成的小型方阵,并调用 `find_saddle_points` 函数去定位其中可能存在的鞍点。如果找到了这样的点,则打印出来它们的具体位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值