Home | History | Annotate | Download | only in hardware_PerfCounterVerification
      1 #!/usr/bin/python2.7
      2 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import numpy
      7 
      8 
      9 def LinearRegression(x, y):
     10     """Perform a linear regression using numpy.
     11 
     12     @param x: Array of x-coordinates of the samples
     13     @param y: Array of y-coordinates of the samples
     14     @return: ((slope, intercept), r-squared)
     15     """
     16     # p(x) = p[0]*x**1 + p[1]
     17     p, (residual,) = numpy.polyfit(x, y, 1, full=True)[:2]
     18     # Calculate the coefficient of determination (R-squared) from the
     19     # "residual sum of squares"
     20     # Reference:
     21     # http://en.wikipedia.org/wiki/Coefficient_of_determination
     22     r2 = 1 - (residual / (y.size*y.var()))
     23 
     24     # Alternate calculation for R-squared:
     25     #
     26     # Calculate the coefficient of determination (R-squared) as the
     27     # square of the  sample correlation coefficient,
     28     # which can be calculated from the variances and covariances.
     29     # Reference:
     30     # http://en.wikipedia.org/wiki/Correlation#Pearson.27s_product-moment_coefficient
     31     #V = numpy.cov(x, y, ddof=0)
     32     #r2 = (V[0,1]*V[1,0]) / (V[0,0]*V[1,1])
     33 
     34     return p, r2
     35 
     36 
     37 def FactsToNumpyArray(facts, dtype):
     38     """Convert "facts" (list of dicts) to a numpy array.
     39 
     40     @param facts: A list of dicts. Each dict must have keys matching the field
     41             names in dtype.
     42     @param dtype: A numpy.dtype used to fill the array from facts. The dtype
     43             must be a "structured array". ie:
     44             numpy.dtype([('loops', numpy.int), ('cycles', numpy.int)])
     45     @returns: A numpy.ndarray with dtype=dtype filled with facts.
     46     """
     47     a = numpy.zeros(len(facts), dtype=dtype)
     48     for i, f in enumerate(facts):
     49         a[i] = tuple(f[n] for n in dtype.names)
     50     return a
     51