我有一個熊貓數據框,其中每列包含一個SciPy稀疏向量。這些向量是來自csr矩陣的行(所以它們實際上是形狀爲1x8500的矩陣)。如何使用稀疏向量計算兩個大熊貓列的每行之間的點積
我需要創建另一列,每行應包含同一行的前兩列向量之間的點積。
我知道如何在每行上使用apply
/map
來做到這一點,但是在處理數百萬行數據集時需要很長時間。是否有更快的方式在整個數據框上執行此操作?
除點積外,我還需要計算餘弦相似度,但據我所知,這可能是從點積計算得來的。
更新:我不能在這裏分享的實際數據,但這裏有一個玩具的例子(注意,我只需要得到的數據框現在):
import pandas as pd
import numpy as np
from scipy.sparse import csr_matrix
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
mat = csr_matrix((data, (row, col)), shape=(3, 3))
df = pd.DataFrame({'Col_1': [mat.getrow(i) for i in range(3)],
'Col_2': [mat.getrow(i)*2 for i in range(3)]})
我知道我可以做這樣的事情來計算dot product:
df['Col_3'] = df.apply(lambda row: np.dot(row['Col_1'],
row['Col_2'].transpose()).toarray()[0][0], axis=1)
但是有沒有更高效的方法來計算Col_3
?
您能提供一個小的可重現樣本數據集和一個所需的數據集嗎? – MaxU
只需清楚:數據框中的項目是否真的是稀疏向量?有些事告訴我這是不理想的設計。你真的需要把熊貓帶進畫面嗎? –
你的數據集有多大? –