Python - Coeficiente de correlacion y fourier

 
Vista:
sin imagen de perfil

Coeficiente de correlacion y fourier

Publicado por Luis Angel (1 intervención) el 07/04/2023 21:16:22
Tengo el siguiente codigo:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import pearsonr
#Bien
def plot_data(data):
plt.plot(data)
plt.show()

def plot_wave(freq, ampl, func):
x = np.linspace(0, 1, 500)
y = ampl * func(2 * np.pi * freq * x)
plt.plot(x, y)
plt.show()
return y

def get_wave_func():
while True:
func_type = input("¿Qué tipo de onda desea crear? (seno/coseno): ")
if func_type.lower() == 'seno':
return np.sin
elif func_type.lower() == 'coseno':
return np.cos
else:
print("Por favor ingrese una opción válida.")

def main():
#bien
data = []
for i in range(5):
data.append(float(input("Ingrese el dato número {}: ".format(i+1))))
plot_data(data)

freq = float(input("Ingrese la frecuencia de la onda: "))
ampl = float(input("Ingrese la amplitud de la onda: "))
wave_func = get_wave_func()

correlation = 0
count = 0
while correlation <= 0.8:
wave = plot_wave(freq, ampl, wave_func)
corr, _ = pearsonr(data, wave)
print("El coeficiente de correlación es:", corr)
if corr <= 0.8:
count += 1
correlation = ((count-1) * correlation + corr) / count

print("La media del coeficiente de correlación es:", correlation)

if __name__ == '__main__':
main()

Basicamente lo que quiero que haga es lo siguiente:
Un proyecto en phyton que haga lo siguiente en orden:
1- Pedir al usuario 5 datos
2- Que la gráfica se muestre en pantalla
3- Generar una nueva onda, la cual tendrá forma de seno o coseno, para determinarlo, el programa le preguntará al usuario que tipo de señal desea
4- Que la gráfica de la nueva señal se muestre en pantalla, JUNTO CON LA PRIMERA
5- Esta nueva onda (la senosoidal o cosenosoidal) tendrán una frecuencia y una amplitud seleccionada por el usuario
6- Mediante coeficiente de corelacion, comparar la grafica de los 5 datos, con la generada mediante seno o coseno
7- Si se parece menos de 0.80, regresar a la pregunta de seno, coseno y amplitud y frecuencia, no salir de ese ciclo hasta que sea igual o mayor a 0.80
8- La primera señal que se pedirá será la unica que se promediará por si sola, apartir de la segunda petición, se promediarán las señales (excepto la de los 5 datos) y se promediarán con la original (la de los 5 datos).


Pero me arroja el siguiente error:
Traceback (most recent call last):
File "e:\Escritorio\BRUT\pROY.py", line 50, in <module>
main()
File "e:\Escritorio\BRUT\pROY.py", line 41, in main
corr, _ = pearsonr(data, wave)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\elpoj\AppData\Local\Programs\Python\Python311\Lib\site-packages\scipy\stats\_stats_py.py", line 4408, in pearsonr
raise ValueError('x and y must have the same length.')
ValueError: x and y must have the same length.

Soy bastante nuevo en python, por lo que no logro encontrar mi error
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder