第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 pandas 為所有字符串對創(chuàng)建距離矩陣

使用 pandas 為所有字符串對創(chuàng)建距離矩陣

精慕HU 2023-07-11 16:44:52
我有一個列表,我想將其轉(zhuǎn)換為距離矩陣from pylev3 import Levenshteinfrom itertools import combinationsmylist = ['foo', 'bar', 'baz', 'foo', 'foo']以下從列表中生成計算矩陣所需的所有可能的對list(combinations(mylist,2))[('foo', 'bar'), ('foo', 'baz'), ('foo', 'foo'), ('foo', 'foo'), ('bar', 'baz'), ('bar', 'foo'), ('bar', 'foo'), ('baz', 'foo'), ('baz', 'foo'), ('foo', 'foo')]然后可以通過以下方式計算每對的距離:def ld(a):  return [Levenshtein.classic(*b) for b in combinations(a, 2)]ld(mylist)[3, 3, 0, 0, 1, 3, 3, 3, 3, 0]然而,我堅持在 pandas 中創(chuàng)建一個類似矩陣的數(shù)據(jù)框 - pandas 中有一個雄辯的解決方案嗎?       foo    bar   baz  foo   foo1 foo   0     3     3    0     02 bar   3     0     1    3     33 baz   3     1     0    3     34 foo   0     3     3    0     05 foo   0     3     3    0     0
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

讓我們嘗試稍微修改一下函數(shù),以便消除重復(fù)條目的計算:


from itertools import combinations, product


def ld(a):

    u = set(a)

    return {b:Levenshtein.classic(*b) for b in product(u,u)}


dist = ld(mylist)


(pd.Series(list(dist.values()), pd.MultiIndex.from_tuples(dist.keys()))

   .unstack()

   .reindex(mylist)

   .reindex(mylist,axis=1)

)

輸出:


     foo  bar  baz  foo  foo

foo    0    3    3    0    0

bar    3    0    1    3    3

baz    3    1    0    3    3

foo    0    3    3    0    0

foo    0    3    3    0    0


查看完整回答
反對 回復(fù) 2023-07-11
?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

為了計算 Levenshtein 距離,我使用了Levenshtein模塊(需要pip install python-Levenshtein ),與fuzzywuzzy配對使用 。

import Levenshtein as lv

然后,當我們使用Numpy函數(shù)時,mylist必須轉(zhuǎn)換為Numpy數(shù)組:

lst = np.array(mylist)

要計算整個結(jié)果,請運行:

result = pd.DataFrame(np.vectorize(lv.distance)(lst[:, np.newaxis], lst[np.newaxis, :]),
    index=lst, columns=lst)

細節(jié):

  • np.vectorize(lv.distance)是lv.distance函數(shù)的矢量化版本 。

  • (lst[:, np.newaxis], lst[np.newaxis, :])是一個numpythonic習慣用法 - 來自lst數(shù)組的“each with every”參數(shù)列表,用于連續(xù)調(diào)用上述函數(shù)。

  • 由于Numpy向量化,整個計算運行得很快,尤其是在大數(shù)組上。

  • pd.DataFrame(...)將上述結(jié)果(Numpy數(shù)組)轉(zhuǎn)換為具有正確索引和列名稱的 DataFrame。

  • 如果需要,請使用原始函數(shù)而不是lv.distance。

結(jié)果是:

     foo  bar  baz  foo  foo

foo    0    3    3    0    0

bar    3    0    1    3    3

baz    3    1    0    3    3

foo    0    3    3    0    0

foo    0    3    3    0    0


查看完整回答
反對 回復(fù) 2023-07-11
  • 2 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號