2016-12-01 9 views
0

これは私行列であるマトリックスに鞍点を見つける:のPython 3.xの

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 

と私はそれがsaddle pointsだ見つけるしたいと思います。

のハメポイントを調整は次のようになります。

2 0 
2 2 
0 4 

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

+1

可能な重複[鞍点についての質問](http://stackoverflow.com/questions/3062161/question-about-saddle-point) –

+0

チェックニックジョンソンの答え:http://stackoverflow.com/a/3062708/2063361 –

+0

ありがとう私はこのトピックを見つけました。すべての行の最小値、すべての列の最大値を見つけ、それらのいずれかが同じ位置にあるかどうかを調べるように書かれています。しかし、私は最後の、最も重要なステップ(位置を確認する)を行う方法がわかりません。 –

答えて

1

は、すべての行/列分の指標とMAXSのリストを組み立てた後、その交差点を見つけるために、一連の操作を使用して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)}

+0

本当にありがとうございます。もう一つ質問があります。新しい行に座標を印刷できますか?たとえば1行目が0.4、2行目が2,0 ... –

+0

@JaroslavŠťastnýこの関数は、鞍点をセットとして返します。一度それを持っていれば、それをソートするかforループを使って行ごとに印刷するなど、あなたが望むことを行うことができます。 –

+0

ああ、本当です、ありがとうございます。 –