Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาค่าเฉลี่ยและความแปรปรวนรวมของสองชุดข้อมูลใน Python

สมมติว่าเรามีสองชุดข้อมูล A1 และ A2 ขนาด b และ a ตามลำดับ เราต้องการหาค่าเฉลี่ยและความแปรปรวนของชุดข้อมูลรวม

เช่น หากอินพุตคือ A1 = [24, 46, 35, 79, 13, 77, 35] และ A2 = [66, 68, 35, 24, 46] ผลลัพธ์จะเป็น Mean = [44.1429, 47.8], sd = [548.694, 294.56], combined mean = 45.6667, d1_square = 2.322, d2_square = 4.5511, combined_var = 446.056

ขั้นตอนการแก้ปัญหา

  1. สร้างฟังก์ชัน mean(arr) คืนค่าเฉลี่ยของอาร์เรย์
  2. สร้างฟังก์ชัน sd(arr, n) คำนวณความแปรปรวน (population variance)
  3. ในฟังก์ชันหลัก:
    • คำนวณ mean1, mean2 และแสดงผล
    • คำนวณ sd1, sd2 และแสดงผล
    • คำนวณ combinedMean = (n*mean1 + m*mean2) / (n+m)
    • คำนวณ d1_square = (mean1 - combinedMean)^2, d2_square = (mean2 - combinedMean)^2
    • คำนวณ combined_var = (n*(sd1 + d1_square) + m*(sd2 + d2_square)) / (n+m)

ตัวอย่างโค้ด Python

def mean(arr):
    return sum(arr) / len(arr)

def sd(arr, n):
    sum_val = 0
    m = mean(arr)
    for i in range(n):
        sum_val += (arr[i] - m) ** 2
    return sum_val / n

def combinedVariance(A1, A2):
    n = len(A1)
    m = len(A2)
    mean1 = mean(A1)
    mean2 = mean(A2)
    print("mean_1:", round(mean1, 2), "mean_2:", round(mean2, 2))
    sd1 = sd(A1, n)
    sd2 = sd(A2, m)
    print("sd_1:", round(sd1, 2), "sd_2:", round(sd2, 2))
    combinedMean = (n * mean1 + m * mean2) / (n + m)
    print("Combined Mean:", round(combinedMean, 2))
    d1_square = (mean1 - combinedMean) ** 2
    d2_square = (mean2 - combinedMean) ** 2
    print("d1_square:", round(d1_square, 2), "d2_square:", round(d2_square, 2))
    comb_var = (n * (sd1 + d1_square) + m * (sd2 + d2_square)) / (n + m)
    print("Combined Variance:", round(comb_var, 2))

A1 = [24, 46, 35, 79, 13, 77, 35]
A2 = [66, 68, 35, 24, 46]
combinedVariance(A1, A2)

อินพุต

[24, 46, 35, 79, 13, 77, 35], [66, 68, 35, 24, 46]

เอาต์พุต

mean_1: 44.14 mean_2: 47.8 sd_1: 548.69 sd_2: 294.56 Combined Mean: 45.67 d1_square: 2.32 d2_square: 4.55 Combined Variance: 446.06