我有一個資料框'df',我想從中提取值并放入 2 個不同的陣列,這些陣列將是 3D 陣列。然后我想為資料集中的整組值找到兩個陣列之間的 minkowski 距離,并將這些(根據 p_values)附加到原始資料幀。但我無法正確創建功能
我的 df 看起來像:
x1 y1 z1 x2 y2 z2
0 0.040928 0.250813 0.258730 0.050584 0.298290 0.273055
1 0.000000 0.174905 0.228518 0.011435 0.215528 0.233548
2 0.990905 0.746038 0.790401 0.972913 0.755414 0.822155
3 0.914052 0.669185 0.707238 0.922316 0.676172 0.734213
4 0.909504 0.480774 0.484074 0.915810 0.503221 0.489242
然后我將 2 個陣列 p1 和 p2 定義為:
p1 = df[["x1", "y1", "z1"]].to_numpy()
p2 = df[["x2", "y2", "z2"]].to_numpy()
現在我想計算兩個陣列之間不同 p 值的 minkowski 值:
from math import sqrt
# calculate minkowski distance
def minkowski_distance(a, b, p):
return sum(abs(e1-e2)**p for e1, e2 in zip(a,b))**(1/p)
dist = minkowski_distance(p1,p2, 2)
dist
array([13.0317225 , 9.36364486, 7.56526207])
我希望我的結果資料框看起來像:
x1 y1 z1 x2 y2 z2 m(1) m(2) m(3) ...
其中 m(1) 表示 p=1 時的 minkowski 距離,依此類推并且該資料幀的所有行都應對應于要計算距離的行值,即
(x1, y1, z1) <---------m--------> (x2,y2,z2)
uj5u.com熱心網友回復:
您可以嘗試以矢量化方式計算 Minkowski 距離:
def minkowski_distance(a, b, p=2):
return np.sum(np.abs(a - b)**p, axis=1)**(1/p)
for p in range(1, 4):
df[f'm({p})'] = minkowski_distance(p1, p2, p)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420097.html
標籤:
上一篇:在文本檔案中排列檔案
下一篇:Numpy陣列錯誤的尺寸與計算
