📅  最后修改于: 2023-12-03 15:11:27.219000             🧑  作者: Mango
在统计学中,加权中位数是一组数字中间位置的数字。加权中位数计算方法是按权值乘以每个数字,将乘积相加并除以总权值。 在给定权重的情况下,本程序将在数组中查找加权中位数。
下面是一个Python代码实现示例:
def weighted_median(arr, weights):
"""
计算给定数组的加权中位数
Args:
arr: 需要计算的数组
weights: 对应数组每个元素的权重
Returns:
加权中位数
"""
sorted_indices = sorted(range(len(arr)), key=lambda k: arr[k])
sorted_arr = [arr[i] for i in sorted_indices]
sorted_weights = [weights[i] for i in sorted_indices]
total_weight = sum(sorted_weights)
median_weight = total_weight / 2.0
cumulative_weight = 0.0
for i in range(len(sorted_arr)):
cumulative_weight += sorted_weights[i]
if cumulative_weight == median_weight:
return sorted_arr[i]
elif cumulative_weight > median_weight:
return sorted_arr[i - 1]
return sorted_arr[-1]
假设我们有以下数组和权重:
arr = [1, 2, 3, 4, 5]
weights = [1, 2, 3, 2, 1]
我们现在想要计算这个数组的加权中位数。首先,我们将数组按从小到大的顺序排序:
sorted_arr = [1, 2, 3, 4, 5]
sorted_weights = [1, 2, 3, 2, 1]
然后,我们计算权重之和:
total_weight = sum(sorted_weights)
total_weight = 9
计算加权中位数的权重:
median_weight = total_weight / 2.0
median_weight = 4.5
最后,我们遍历排序后的数组,总是追踪加权元素的总和。 当总和超过或等于加权中位数时,我们返回当前元素的值,如下所示:
cumulative_weight = 0.0
for i in range(len(sorted_arr)):
cumulative_weight += sorted_weights[i]
if cumulative_weight == median_weight:
return sorted_arr[i]
elif cumulative_weight > median_weight:
return sorted_arr[i - 1]
return sorted_arr[-1]
因此,计算结果为3(加权中位数)。