:-) 주시면 감사하겠습니다, 당신은 scipy.spatial.distance.cdist
을 사용할 수 있습니다. 이것은 double Python 루프를 사용하여 보다 훨씬 더 빠릅니다.
하나의 컬렉션을 df
의 모든 열이라고합시다. 값이 싸서 할 수
import scipy.spatial.distance as SSD
values = SSD.cdist(df2.T, df.T, metric='cosine')
# array([[ 2.92893219e-01, 1.11022302e-16, 3.00000000e-01],
# [ 4.34314575e-01, 3.00000000e-01, 1.11022302e-16]])
:
모든 코사인 유사성이 하나의 호출로 계산 될 수있다
import pandas as pd
df = pd.DataFrame({'14':[0,2,0], '17':[5,5,0], '19':[3,4,5]})
mask = df.sum(axis=0) > 5
df2 = df.loc[:, mask]
cdist
에 : 합이 큰 5보다 여기서 다른 컬렉션 만 열하자 새로운 DataFrame와 재편 :
result = pd.DataFrame(values, columns=df.columns, index=df2.columns)
result = result.stack()
import pandas as pd
import scipy.spatial.distance as SSD
df = pd.DataFrame({'14':[0,2,0], '17':[5,5,0], '19':[3,4,5]})
mask = df.sum(axis=0) > 5
df2 = df.loc[:, mask]
values = SSD.cdist(df2.T, df.T, metric='cosine')
result = pd.DataFrame(values, columns=df.columns, index=df2.columns)
result = result.stack()
mask = result.index.get_level_values(0) != result.index.get_level_values(1)
result = result.loc[mask]
print(result)
어떤 항목이 거기 없기 때문에
은 내가 똑바로 받고 있어요 경우`CS를 원하지 않을 것이다
17 14 0.292893
19 0.300000
19 14 0.434315
17 0.300000
시리즈 (14,17)'나'CS (14,19)'등을 산출 '14'열은 5보다 큽니다. 당신은 아무것도 시도하지 않았습니까? 실패한 코드와 예제를 제공해 주시겠습니까? – danielhadar
안녕하세요, @ 다니엘합니다. 사실 지금까지 나는 계산을 거의하지 않았다. 나는 함수에 적용 할 수있는 방법 (이 경우에는 코사인 유사성을 적용하지만 더 많은 함수를 적용 할 수있는 방법)이 벡터의 방식으로 각 열 쌍에 적용되는지, 즉 열에 루프를 작성하지 않는지 묻습니다. 마지막 df의 빌드는 결과를 더 잘 시각화하는 것이지만 중요하지는 않습니다. –