Tengo una matriz numpy 3D (tiempo, X, Y) que contiene 6 series de tiempo por hora durante algunos años. (decir 5). Me gustaría crear una serie temporal muestreada que contenga 1 instancia de cada día calendario tomada al azar de los registros disponibles (5 posibilidades por día), de la siguiente manera.¿Cuál es la manera más rápida de muestrear rebanadas de matrices numpy?
- Ene 01: 2006
- Ene 02: 2011
- Ene 03: 2009
- ...
esto significa que tengo que tomar 4 valores del 01/01/2006 , 4 valores a partir del 02/01/2011, etc. Tengo una versión funcional que funciona de la siguiente manera:
- remodelar la matriz de entrada para añadir una dimensión "año" (Time, Año, X, Y)
- crear una matriz 365 valores de números enteros generados al azar entre 0 y 4
- Uso np.repeat y matriz de enteros para extraer sólo los valores relevantes:
Ejemplo:
sampledValues = Variable[np.arange(numberOfDays * ValuesPerDays), sampledYears.repeat(ValuesPerDays),:,:]
esto parece funcionar, pero me preguntaba si este es el mejor enfoque/más rápida de resolver mi problema? La velocidad es importante ya que estoy haciendo esto en un bucle, y me beneficiaría probando tantos casos como sea posible.
¿Estoy haciendo esto bien?
Gracias
EDITAR me olvidó mencionar que el conjunto de datos de entrada filtrada para eliminar el 29 de febrero para los años bisiestos.
Básicamente el objetivo de esa operación es encontrar una muestra de 365 días que coincida bien con la serie temporal a largo plazo en términos de media, etc. Si la serie temporal muestreada pasa mi prueba de calidad, quiero exportarla y comenzar de nuevo.
¡Esto parece un enfoque prometedor! – heltonbiker
Debería haberlo mencionado, pero en este caso realmente no me importan los años bisiestos, ya que eliminé todas las ocurrencias del 29 de febrero en la serie temporal de entrada. Pensé en utilizar scikits.timeseries, sin embargo, no estoy seguro de que realmente me beneficiaría en términos de velocidad. Además, es posible que desee comenzar mis días a las 6:00 o a las 12:00, así que realmente no quiero tener que crear una matriz de objetos datetime para extraer cada vez que podría usar mi matriz muestreada (rs = np .random.randint (0, np.size (años), tamaño = 365)) enseguida. ¡Pero puedo estar equivocado! – Jahfet