python - functions - Comprender la concordancia de NumPy
numpy tutorial español pdf (1)
Al calcular una media móvil simple, numpy.convolve
parece hacer el trabajo.
Pregunta: ¿Cómo se hace el cálculo cuando usas np.convolve(values, weights, ''valid'')
?
Cuando los documentos mencionados convolution product is only given for points where the signals overlap completely
, ¿a qué se refieren las 2 señales?
Si alguna explicación puede incluir ejemplos e ilustraciones, será extremadamente útil.
window = 10
weights = np.repeat(1.0, window)/window
smas = np.convolve(values, weights, ''valid'')
Convolution es un operador matemático utilizado principalmente en el procesamiento de señales. Numpy simplemente usa esta nomenclatura de procesamiento de señal para definirla, de ahí las referencias de "señal". Una matriz en numpy es una señal. La convolución de dos señales se define como la integral de la primera señal, invertida , barrida ("convolucionada sobre") la segunda señal y multiplicada (con el producto escalar) en cada posición de los vectores superpuestos. La primera señal a menudo se denomina kernel , especialmente cuando se trata de una matriz 2-D en el procesamiento de imágenes o redes neuronales, y la inversión se convierte en una duplicación en 2-D (NO transpuesta). Se puede entender más claramente usando las animaciones en wikipedia .
Las circunvoluciones tienen múltiples definiciones según el contexto. Algunos inician la convolución cuando comienza la superposición, mientras que otros comienzan cuando la superposición es solo parcial. En el caso del modo "válido" de numpy, se especifica que la superposición siempre está completa. Se llama "válido" ya que cada valor dado en el resultado se realiza sin extrapolación de datos.
Por ejemplo, si su matriz X tiene una longitud de 2 y su matriz Y tiene una longitud de 4, la convolución de X sobre Y en el modo "válido" le dará una matriz de longitud 3.
Primer paso, para X = [4 3] e Y = [1 1 5 5]:
[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 1 = 7
Segundo paso:
[3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23
Tercer paso:
[3 4]
[1 1 5 5]
= 3 * 5 + 4 * 5 = 35
El resultado de la convolución para el modo "válido" sería entonces [7 23 35].
Si la superposición se especifica como un único punto de datos (como en el caso del modo "lleno"), el resultado le hubiera dado una matriz de longitud 5. El primer paso es:
[3 4]
[1 1 5 5]
= 3 * undefined (extrapolated as 0) + 4 * 1 = 4
Y así. Existen más modos de extrapolación.