2016-12-01 3 views
0

Dies ist meine Matrix:Python 3.x Finding Sattelpunkte in einer Matrix

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 

und ich möchte es saddle points finden.

KOORDINATEN von Sattelpunkte sein sollte:

2 0 
2 2 
0 4 

Also meine Frage ist. Kann mir jemand zeigen, wie man das in Python macht? :)

+1

Mögliche doppelten von [Frage über Sattelpunkt] (http://stackoverflow.com/questions/3062161/question-about-saddle-point) –

+0

Überprüfen Nick Johnson Antwort: http://stackoverflow.com/a/3062708/2063361 –

+0

Vielen Dank Ich habe dieses Thema gefunden. Es ist geschrieben, dass ich die kleinsten Werte aller Zeilen finden sollte, die größten Werte aller Spalten und sehe, ob einige von ihnen an der gleichen Position sind. Aber ich weiß nicht, wie ich den letzten und wichtigsten Schritt machen soll (überprüfe die Position). –

Antwort

1

Hier ist ein Python-Ansatz, die Listen des Indizes aller Zeilen/Spalten-Min und maxs und verwendet dann Set-Operationen versammelt ihre Kreuzungen zu finden:

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)) 

Ausgang: {(0, 4), (2, 0), (2, 2)}

+0

Ich schätze Ihre Hilfe sehr. Ich habe noch eine Frage. Kann es die Koordinaten auf neuen Linien drucken? z. B. 0,4 in der ersten Zeile, 2,0 in der zweiten Zeile ... –

+0

@ JaroslavŠťastný Die Funktion gibt die Sattelpunkte als Satz zurück. Sobald Sie das haben, können Sie damit machen, was Sie wollen, einschließlich der Sortierung oder mit einer For-Schleife, um es Zeile für Zeile zu drucken. –

+0

Oh, das stimmt, danke. –