真快的問題,
我有以下距離功能
def distance(a1,a2,b1,b2):
return sqrt((a2-a1)**2 (b2-b1)**2)
我想計算資料框中 A 列中每個點與 B 列之間的距離,并將最大值保存在 C 列中。
現在我在嵌套回圈中遍歷每個并使用 distance(df.loc[i, colA], dftest.loc[i,colB], dftest.loc[j,colA], dftest.loc[j.colB] ) 并檢查是否大于以前。我知道有一種方法可以將它矢量化,只是無法理解。
我不需要任何現成的功能,但請清楚如何矢量化它。
我感謝任何幫助!
編輯:資料幀示例,colB 是所需的輸出:
ColA| ColB| ColC
7.6 |8.2 |6.79 (max distance which is between this row and row3)
6.6 |4.4 |3.92 (max distance is with row1, greater than row3)
4.4 |2.2 |6.79 (max distance is with row1)
因此,例如第一行的 ColC 是用 distance(7.6,8.2,4.4,2.2) 計算的,但函式 distnace 必須通過所有組合
使用更大的 dfs 會變得非常昂貴
uj5u.com熱心網友回復:
由于您不想使用庫,您可以使用底層的 numpy 陣列,廣播向量計算并獲得最大值:
import numpy as np
a = df.values # easier reference to numpy array
b = (a[:,0]-a[:,0,None])**2 (a[:,1]-a[:,1,None])**2 # (a2-a1)**2 (b2-b1)**2
df['ColC'] = np.sqrt(b.max(0))
輸出:
ColA ColB ColC
0 7.6 8.2 6.800000
1 6.6 4.4 3.929377
2 4.4 2.2 6.800000
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/347966.html
上一篇:帶有條件規則的Pandas樣式
