fork download
  1. from statistics import mean, variance
  2. from typing import Callable, Sequence
  3. from pprint import pprint
  4.  
  5.  
  6. def populate_lst(data: Sequence[Sequence], func: Callable) -> list:
  7. out = []
  8. for comb in zip(*data):
  9. out.append(func(comb))
  10. return out
  11.  
  12.  
  13. def build_covar(data: Sequence, var_in: list, mean_in: list) -> list:
  14. out = []
  15. if len(var_in) != len(mean_in):
  16. raise ArithmeticError('lengths dont match!')
  17. LEN = len(var_in)
  18. prob = 1/(LEN**2)
  19. for rowNum in range(LEN):
  20. covRow = []
  21. for colNum in range(LEN):
  22. if rowNum == colNum:
  23. covRow.append(var_in[rowNum])
  24. continue
  25. cov = 0
  26. for i in range(3):
  27. for j in range(3):
  28. cov += (data[i][rowNum] - mean_in[rowNum])*(data[j][colNum] - mean_in[colNum])*prob
  29. covRow.append(cov)
  30. out.append(covRow)
  31. return out
  32.  
  33.  
  34. def main() -> None:
  35. exprs = [
  36. [0.844, 0.929, 0.971, 0.229, 0.302, 0.026, 0.240, 0.921],
  37. [0.322, 0.720, 0.152, 0.145, 0.466, 0.500, 0.885, 0.311],
  38. [0.037, 0.695, 0.614, 0.206, 0.967, 0.425, 0.110, 0.500],
  39. ]
  40. Ds = populate_lst(exprs, variance) # дисперсия
  41. Ms = populate_lst(exprs, mean) # матожидание
  42. result = build_covar(exprs, Ds, Ms) # результат говнокода
  43. for row in result:
  44. print(row)
  45. print('\n\n')
  46. # вариант 2...
  47. import numpy as np
  48. arr = np.array(exprs)
  49. result2 = np.cov(arr.transpose())
  50. pprint(result2)
  51.  
  52.  
  53. if __name__ == '__main__':
  54. main()
Success #stdin #stdout 0.2s 27520KB
stdin
Standard input is empty
stdout
[0.167493, 0.0, 2.710505431213761e-19, 2.710505431213761e-20, 0.0, -1.0842021724855044e-19, -4.336808689942018e-19, 0.0]
[0.0, 0.016510333333333346, -8.131516293641283e-20, -6.776263578034403e-21, 0.0, -5.421010862427522e-20, 5.421010862427522e-20, 5.421010862427522e-20]
[0.0, 1.0842021724855044e-19, 0.16860899999999998, -2.879912020664621e-20, -5.421010862427522e-20, 3.2526065174565133e-19, -2.710505431213761e-20, 5.082197683525802e-19]
[1.3552527156068805e-20, -1.3552527156068805e-20, -4.573977915173222e-20, 0.001884333333333334, -2.710505431213761e-20, 1.3552527156068805e-20, -2.0328790734103208e-20, 3.049318610115481e-20]
[-4.336808689942018e-19, 1.0842021724855044e-19, -1.8973538018496328e-19, 2.710505431213761e-20, 0.12002033333333333, 0.0, 2.168404344971009e-19, 2.168404344971009e-19]
[-1.0842021724855044e-19, -1.0842021724855044e-19, 2.846030702774449e-19, 2.0328790734103208e-20, -2.168404344971009e-19, 0.06491699999999999, -2.168404344971009e-19, 5.421010862427522e-20]
[0.0, 1.0842021724855044e-19, -5.421010862427522e-19, -1.3552527156068805e-20, -2.168404344971009e-19, 0.0, 0.17225833333333335, 4.336808689942018e-19]
[2.168404344971009e-19, 0.0, 4.2690460541616737e-19, -1.0164395367051604e-20, 3.2526065174565133e-19, 0.0, 2.168404344971009e-19, 0.09751033333333335]



array([[ 0.167493  ,  0.0508435 ,  0.0973245 ,  0.007504  , -0.127508  ,
        -0.091341  , -0.0018175 ,  0.100717  ],
       [ 0.0508435 ,  0.01651033,  0.0405265 ,  0.00356883, -0.03373517,
        -0.0317595 , -0.01416833,  0.03687983],
       [ 0.0973245 ,  0.0405265 ,  0.168609  ,  0.0175315 , -0.0233765 ,
        -0.0942165 , -0.1399825 ,  0.1228675 ],
       [ 0.007504  ,  0.00356883,  0.0175315 ,  0.00188433,  0.00024833,
        -0.008928  , -0.01641083,  0.01207533],
       [-0.127508  , -0.03373517, -0.0233765 ,  0.00024833,  0.12002033,
         0.050916  , -0.06149083, -0.04755267],
       [-0.091341  , -0.0317595 , -0.0942165 , -0.008928  ,  0.050916  ,
         0.064917  ,  0.0519975 , -0.078549  ],
       [-0.0018175 , -0.01416833, -0.1399825 , -0.01641083, -0.06149083,
         0.0519975 ,  0.17225833, -0.08086583],
       [ 0.100717  ,  0.03687983,  0.1228675 ,  0.01207533, -0.04755267,
        -0.078549  , -0.08086583,  0.09751033]])