I needed to generate a wind speed time series for a simulation, and couldn’t find any pre-existing code in Python to achieve this.
However, I did find the following post on using a Markov autoregressive function to achieve the same in R:
So I’ve copied the mathematics used there and ported it across to Python, but with a bit of OOP rearrangement to give an object which will compute values on demand. In retrospect, a full-on generator class might be more pythonic, but I’ll leave that for now.
First some imports and helper functions:
from collections import Counter
#homegrown weibull probability function
#scipy.stats.exonweib.pdf gives different result from R dweibull function
return [(shape/scale)*((x/scale)**(shape-1))*math.exp(-1*(x/scale)**shape) for x in data]
#matrix-vector multiplier from http://code.activestate.com/recipes/121574-matrix-vector-multiplication/
#equivalent to %*% in R
def matmult4(m, v):
return [reduce(operator.add,map(operator.mul,r,v)) for r in m]