2016-04-15 16 views
2

Also muss ich Adjazenzmatrizen, die numpy 2D-Arrays sind, und ich möchte die Anzahl der ähnlichen Elemente zwischen den beiden zählen. Das hört sich vielleicht albern an und ich weiß, dass es mit einer einfachen for-Schleife gemacht werden kann, aber ich frage mich, ob es einen Oneliner gibt? Oder vielleicht eine schnellere Art, es zu tun, da ich mit großen Matrizen zu tun habe. Der folgende Code ist, was ich habe jetzt:Python: Zähle ähnliche Elemente von zwei Matrizen

adj1 = graph1.get_adjacency() 
adj2 = graph2.get_adjacency() 

count = 0 
for i in range(len(adj1)): 
    for j in range(len(adj1)): 
     if adj[i][j] == adj[i][j]: 
      count += 1 

Antwort

3

try this:

np.sum(adj1 == adj2) 

wenn die dtype von ADJ1 und adj2 Schwimmer ist:

np.sum(np.isclose(adj1, adj2)) 
1

Wenn Sie in der Lage sein wollte Verwenden Sie die Ergebnisse des Vergleichs von adj1 und adj2, ich empfehle, diese in zwei Zeilen zu trennen:

test = np.equal(adj1,adj2) 
count = sum(test[test == True]) 

Aber das wird Ihnen das gleiche Ergebnis wie die angenommene Antwort geben.

+0

'test == Wahr 'ist ein No-Op, nein? – Veedrac

+0

@Veedrac Ich glaube nicht, aber ich habe den Beitrag bearbeitet. Was ich sagen wollte, war: count = sum (test [test == True]) ' – Nate

+0

Das brauchst du nicht,' sum (test) 'wird genau dasselbe machen. – Jaime