math_stats.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # 一些基础统计函数:平均值、方差、极值与归一化
  2. # 保持示例简单可读,不依赖外部库。
  3. def mean(nums):
  4. count = 0
  5. total = 0
  6. for x in nums:
  7. total += x
  8. count += 1
  9. return total / count if count else 0
  10. def variance(nums):
  11. # 使用总体方差公式
  12. m = mean(nums)
  13. count = 0
  14. acc = 0
  15. for x in nums:
  16. diff = x - m
  17. acc += diff * diff
  18. count += 1
  19. return acc / count if count else 0
  20. def min_max(nums):
  21. it = iter(nums)
  22. try:
  23. first = next(it)
  24. except StopIteration:
  25. return None, None
  26. mn = mx = first
  27. for x in it:
  28. if x < mn:
  29. mn = x
  30. if x > mx:
  31. mx = x
  32. return mn, mx
  33. def normalize(nums):
  34. # 线性归一化到 [0,1]; 若所有值相等则返回全 0
  35. mn, mx = min_max(nums)
  36. out = []
  37. if mn is None:
  38. return out
  39. span = mx - mn
  40. if span == 0:
  41. for _ in nums:
  42. out.append(0)
  43. return out
  44. for x in nums:
  45. out.append((x - mn) / span)
  46. return out
  47. if __name__ == '__main__':
  48. data = [3, 7, 2, 9, 4]
  49. print('data =', data)
  50. print('mean =', mean(data))
  51. print('variance =', variance(data))
  52. print('min,max =', min_max(data))
  53. print('normalize =', normalize(data))