我正在做一對具有奇怪距離度量的東西的成對距離。我有一個像{(key_A, key_B):distance_value}
這樣的詞典,我想像距離矩陣一樣對稱pd.DataFrame
。將字典轉換成大熊貓的對稱/距離矩陣的最有效方法
什麼是最有效的方法來做到這一點?我找到了一種方法,但它似乎不是最好的方式來做到這一點。執行此類操作的NumPy
或Pandas
中是否有任何內容?或只是一個更快的方法?我的方法是1.46 ms per loop
np.random.seed(0)
D_pair_value = dict()
for pair in itertools.combinations(list("ABCD"),2):
D_pair_value[pair] = np.random.randint(0,5)
D_pair_value
# {('A', 'B'): 4,
# ('A', 'C'): 0,
# ('A', 'D'): 3,
# ('B', 'C'): 3,
# ('B', 'D'): 3,
# ('C', 'D'): 1}
D_nested_dict = defaultdict(dict)
for (p,q), value in D_pair_value.items():
D_nested_dict[p][q] = value
D_nested_dict[q][p] = value
# Fill diagonal with zeros
DF = pd.DataFrame(D_nested_dict)
np.fill_diagonal(DF.values, 0)
DF
謝謝!我今天學到了一些新東西:'scipy.spatial.distance.squareform' – MaxU
方法2:是的!很好的一個,非常感謝'root' –