0

これは私のマトリックスです:

1  1  2  5  6  1     
5  6  8  5  6  7
10 12 10 12 11 11
8 10  5  6  8  9
6  5 10 12 15 19

サドルポイントを見つけたいと思います。

サドルポイントの座標は次のとおりです。

2 0 
2 2
0 4

だから私の質問はです。Pythonでこれを作成する方法を教えてもらえますか? :)

4

3 に答える 3

3

これは、すべての行/列の最小値と最大値のインデックスのリストを組み立て、集合演算を使用してそれらの交点を見つける Python アプローチです。

def allSaddles(matrix):
    rowmins = []
    rowmaxs = []
    colmins = []
    colmaxs = []

    for i,row in enumerate(matrix):
        m = min(row)
        M = max(row)
        for j,x in enumerate(row):
            if x == m: rowmins.append((i,j))
            if x == M: rowmaxs.append((i,j))

    t = [list(column) for column in zip(*matrix)] #transpose of matrix

    for j,col in enumerate(t): 
        m = min(col)
        M = max(col)
        for i,x in enumerate(col):
            if x == m: colmins.append((i,j))
            if x == M: colmaxs.append((i,j))

    return (set(rowmins) & set(colmaxs)) | (set(rowmaxs) & set(colmins))

M = [[1,1,2,5,6,1],    
[5,6,8,5,6,7],
[10,12,10,12,11,11],
[8,10,5,6,8,9],
[6,5,10,12,15,19]]

print(allSaddles(M))

出力:{(0, 4), (2, 0), (2, 2)}

于 2016-12-02T01:37:32.597 に答える