Advertisement
Guest User

lab2.py

a guest
Oct 25th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.12 KB | None | 0 0
  1. import numpy as np
  2. import math
  3.  
  4. n = 400
  5.  
  6.  
  7. def initX(n, mu, sigma):
  8.     return np.random.multivariate_normal(mu, sigma, n)
  9.  
  10.  
  11. def initR(n, size):
  12.     res = []
  13.     for i in xrange(0, n):
  14.         row = []
  15.         for j in xrange(0, size):
  16.             val = np.random.random_sample()
  17.             if val <= 0.5:
  18.                 row.append(1.0)  # obs
  19.             else:
  20.                 row.append(0.0)
  21.         res.append(row)
  22.  
  23.     return res
  24.  
  25.  
  26. def complexMethod(x, r):
  27.     x_obs = []
  28.  
  29.     for i, r_i in enumerate(r):
  30.         if sum(r_i) == len(r_i):
  31.             x_obs.append(x[i])
  32.  
  33.     x_obs_mean = []
  34.     sums = sum(x_obs[:])
  35.     for i in xrange(len(x[0])):
  36.         x_obs_mean.append((sums[i]) / len(x_obs))
  37.  
  38.     print "Mean = " + str(x_obs_mean)
  39.  
  40.     x_obs_cov = []
  41.     for i in xrange(len(x_obs[0])):
  42.         row = []
  43.         for j in xrange(len(x_obs[0])):
  44.             val = 0
  45.             for k in xrange(len(x_obs)):
  46.                 val += (x_obs[k][i] - x_obs_mean[i]) * (x_obs[k][j] - x_obs_mean[j])
  47.             row.append(val / float(len(x) - 1))
  48.  
  49.         x_obs_cov.append(row)
  50.  
  51.     print "Covariance = " + str(x_obs_cov)
  52.  
  53.     x_obs_corr = []
  54.     for i in xrange(len(x[0])):
  55.         row = []
  56.         for j in xrange(len(x[0])):
  57.             row.append(x_obs_cov[i][j] / math.sqrt(x_obs_cov[i][i] * x_obs_cov[j][j]))
  58.         x_obs_corr.append(row)
  59.  
  60.     print "Correlation = " + str(x_obs_corr)
  61.     return x_obs_mean, x_obs_cov, x_obs_corr
  62.  
  63.  
  64. def availableMethod(x, r, printRes=True):
  65.     x_mean = []
  66.     for i in xrange(len(x[0])):
  67.         numerator = 0
  68.         denominator = 0
  69.         for k in xrange(len(x)):
  70.             numerator += r[k][i] * x[k][i]
  71.             denominator += r[k][i]
  72.         x_mean.append(numerator / float(denominator))
  73.  
  74.     if printRes:
  75.         print "Mean = " + str(x_mean)
  76.  
  77.     x_cov = []
  78.     for i in xrange(len(x[0])):
  79.         row = []
  80.         for j in xrange(len(x[0])):
  81.             val = 0
  82.             den = 0
  83.             for k in xrange(len(x)):
  84.                 val += (r[k][i] * r[k][j]) * (x[k][i] - x_mean[i]) * (x[k][j] - x_mean[j])
  85.                 den += (r[k][i] * r[k][j])
  86.             row.append(val / float(den - 1))
  87.  
  88.         x_cov.append(row)
  89.  
  90.     if printRes:
  91.         print "Covariance = " + str(x_cov)
  92.  
  93.     x_corr = []
  94.     for i in xrange(len(x[0])):
  95.         row = []
  96.         for j in xrange(len(x[0])):
  97.             row.append(x_cov[i][j] / math.sqrt(x_cov[i][i] * x_cov[j][j]))
  98.         x_corr.append(row)
  99.  
  100.     if printRes:
  101.         print "Correlation = " + str(x_corr)
  102.  
  103.     return x_mean, x_cov, x_corr
  104.  
  105.  
  106. def f1(x, r, x_mean, i, j, k, l):
  107.     res = 0
  108.     for n in xrange(len(x)):
  109.         res += (r[n][k] * r[n][l] * (x[n][i] - x_mean[i][i]) * (x[n][j] - x_mean[j][j]))
  110.     return res
  111.  
  112.  
  113. def f2(r, k, l):
  114.     res = 0
  115.     for i in xrange(len(r)):
  116.         res += r[i][k] * r[i][l]
  117.     return res - 1
  118.  
  119.  
  120. # todort
  121. def availableMethod2(x, r):
  122.     x_mean = []
  123.     for i in xrange(len(x[0])):
  124.         row = []
  125.         for j in xrange(len(x[0])):
  126.             numerator = 0
  127.             denominator = 0
  128.             for k in xrange(len(x)):
  129.                 numerator += r[k][i] * r[k][j] * x[k][i]
  130.                 denominator += r[k][i] * r[k][j]
  131.             row.append(numerator / float(denominator))
  132.         x_mean.append(row)
  133.  
  134.     print "Mean = " + str(x_mean)
  135.  
  136.     x_cov = []
  137.     for i in xrange(len(x[0])):
  138.         row = []
  139.         for j in xrange(len(x[0])):
  140.             val = 0
  141.             den = 0
  142.             for k in xrange(len(x)):
  143.                 val += (r[k][i] * r[k][j]) * (x[k][i] - x_mean[i][j]) * (x[k][j] - x_mean[j][i])
  144.                 den += (r[k][i] * r[k][j])
  145.             row.append(val / float(den - 1))
  146.  
  147.         x_cov.append(row)
  148.  
  149.     print "Covariance wave = " + str(x_cov)
  150.  
  151.     x_corr_wave = []
  152.     for i in xrange(len(x[0])):
  153.         row = []
  154.         for j in xrange(len(x[0])):
  155.             row.append(x_cov[i][j] / math.sqrt(x_cov[i][i] * x_cov[j][j]))
  156.         x_corr_wave.append(row)
  157.  
  158.     print "Correlation wave = " + str(x_corr_wave)
  159.  
  160.     x_corr_star_wave = []
  161.     for i in xrange(len(x[0])):
  162.         row = []
  163.         for j in xrange(len(x[0])):
  164.             row.append(x_cov[i][j] / math.sqrt(
  165.                 (f1(x, r, x_mean, i, i, i, j) / float(f2(r, i, j))) * (
  166.                     f1(x, r, x_mean, j, j, i, j) / float(f2(r, i, j)))))
  167.         x_corr_star_wave.append(row)
  168.  
  169.     print "Correlation star wave = " + str(x_corr_star_wave)
  170.  
  171.     x_corr_star = []
  172.     x_mean_available, x_cov_available, x_corr_available = availableMethod(x, r, False)
  173.     for i in xrange(len(x[0])):
  174.         row = []
  175.         for j in xrange(len(x[0])):
  176.             row.append(x_cov_available[i][j] / math.sqrt(
  177.                 (f1(x, r, x_mean, i, i, i, j) / float(f2(r, i, j))) * (
  178.                     f1(x, r, x_mean, j, j, i, j) / float(f2(r, i, j)))))
  179.         x_corr_star.append(row)
  180.  
  181.     print "Correlation star = " + str(x_corr_star)
  182.  
  183.  
  184. def monteCarlo(n, mean, var):
  185.     list_mean = []
  186.     list_var = []
  187.     for i in xrange(n):
  188.         x = initX(n, mean, var)
  189.         r = initR(n, 2)
  190.         x_mean, x_var, corr = availableMethod(x, r)
  191.         list_mean.append(x_mean)
  192.         list_var.append(x_var)
  193.  
  194.     return sum([np.array(np.array(list_mean[i]) - np.array(mean)) for i in xrange(n)]) / float(n), sum(
  195.         [np.array(np.array(list_var[i]) - np.array(mean)) for i in xrange(n)]) / float(n)
  196.  
  197.  
  198. def main():
  199.     x = initX(n, [1.0, -1.0], [[0.66, 0.1], [0.1, 0.33]])
  200.     r = initR(n, 2)
  201.     print "complex"
  202.     complexMethod(x, r)
  203.     print "available"
  204.     availableMethod(x, r)
  205.     print "complex"
  206.     availableMethod2(x, r)
  207.  
  208.     # x = initX(n, [1.0, 1.0, 1.0], [
  209.     #     [1.0, 0.1, 0.2],
  210.     #     [0.1, 1.0, 0.3],
  211.     #     [0.2, 0.3, 1.0]
  212.     # ])
  213.     # r = initR(n, 3)
  214.     # print "complex"
  215.     # complexMethod(x, r)
  216.     # print "available"
  217.     # availableMethod(x, r)
  218.     # print "complex"
  219.     # availableMethod2(x, r)
  220.  
  221.     # print "monte-carlo:"
  222.     # _m, _v = monteCarlo(n, [1.0, 1.0], [[1.0, 1.0], [1.0, 1.0]])
  223.     # print "mean = " + str(_m)
  224.     # print "covar = " + str(_v)
  225.  
  226.  
  227. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement