求助:编写Python函数计算手机参数的理想最优/最差欧氏距离
计算手机参数的理想最优/最差欧氏距离
原始参数表格
| 手机品牌 | Battery(mAh) | RAM(GB) | Storage(GB) | ED from Ideal best | ED from Ideal worst |
|---|---|---|---|---|---|
| Sansung | 1000 | 4 | 2 | ||
| iPhone | 8000 | 6 | 3 | ||
| Motorola | 3000 | 3 | 1 |
计算公式
- 理想最优欧氏距离(ED from Ideal best):
√((Battery(mAh)-Battery(mAh)最大值)^2 + (RAM(GB)-RAM(GB)最大值)^2 + (Storage(GB)-Storage(GB)最大值)^2)
- 理想最差欧氏距离(ED from Ideal Worst):
√((Battery(mAh)-Battery(mAh)最小值)^2 + (RAM(GB)-RAM(GB)最小值)^2 + (Storage(GB)-Storage(GB)最小值)^2)
示例:三星(Sansung)手机的理想最优欧氏距离为√((1000-8000)2+(4-6)2+(2-3)^2) = 7000.00035714
完整Python实现
import pandas as pd import numpy as np def calculate_ideal_distances(df): # 提取各参数的极值 battery_max, battery_min = df["Battery(mAh)"].agg(["max", "min"]) ram_max, ram_min = df["RAM(GB)"].agg(["max", "min"]) storage_max, storage_min = df["Storage(GB)"].agg(["max", "min"]) # 计算理想最优距离 df["ED from Ideal best"] = np.sqrt( (df["Battery(mAh)"] - battery_max)**2 + (df["RAM(GB)"] - ram_max)**2 + (df["Storage(GB)"] - storage_max)**2 ) # 计算理想最差距离 df["ED from Ideal worst"] = np.sqrt( (df["Battery(mAh)"] - battery_min)**2 + (df["RAM(GB)"] - ram_min)**2 + (df["Storage(GB)"] - storage_min)**2 ) return df # 测试用例 if __name__ == "__main__": # 构造测试数据 test_data = { "手机品牌": ["Sansung", "iPhone", "Motorola"], "Battery(mAh)": [1000, 8000, 3000], "RAM(GB)": [4, 6, 3], "Storage(GB)": [2, 3, 1], "ED from Ideal best": ["", "", ""], "ED from Ideal worst": ["", "", ""] } df = pd.DataFrame(test_data) # 执行计算并输出结果 result_df = calculate_ideal_distances(df) print(result_df.round(8))
说明
- 函数
calculate_ideal_distances接收包含手机参数的DataFrame作为输入,先一次性提取各参数的最大/最小值,再批量计算每行的两个欧氏距离 - 测试用例使用给定的示例数据,运行后会输出填充好距离值的表格,结果保留8位小数便于查看精度
内容的提问来源于stack exchange,提问作者Madness
相关产品推荐
相关产品推荐

