Schnellster Weg, um Indizes mit höchstem Wert in einer Matrix iterativ und ausschließend zu finden
Posted: 12 Mar 2025, 02:37
Ich versuche, die "besten Hits" in einer Ähnlichkeitsmatrix zu finden (d. H. Eine MXN -Matrix, wobei der Index entlang jeder Achse der ITH -Position in Vektor M und der JTH -Position in Vektor n entspricht). Der einfachste Weg, dies zu erklären, besteht darin, die Indizes der höchsten Werte in einer Matrix iterativ zu finden, ohne zuvor ausgewählte Zeilen und Spalten. Dies führt zu min (m, n) ausgewählten Indizes.
Code: Select all
import numpy as np
import pandas as pd
def pairwise_best_hit(sim):
xdim,ydim = np.meshgrid(np.arange(sim.shape[1]),np.arange(sim.shape[0]))
table = np.vstack((sim.ravel(),xdim.ravel(),ydim.ravel())).T
df = pd.DataFrame(table).rename(columns={0:'sim',1:'index2',2:'index1'}).sort_values('sim',ascending=False)
seq1_hits = []
seq2_hits = []
while len(df):
index1 = df.iloc[0]['index1']
index2 = df.iloc[0]['index2']
seq1_hits.append(index1)
seq2_hits.append(index2)
df = df[(df['index1']!=index1)&(df['index2']!=index2)]
return [seq1_hits,seq2_hits]
< /code>
und für eine Matrix < /p>
sim = np.array([[1,5,6,2],[7,10,3,4],[1,5,3,7]])
pairwise_best_hit(sim)
< /code>
Gibt < /p>
zurück[[1, 2, 0], [1, 3, 2]]