J'ai donc fait ma liste mais après cela je ne sais pas comment en retirer mes x et y pour pouvoir l'utiliser plus tard pour créer un graphique

import random
import numpy as np
import matplotlib.pyplot as plt

tabuletson = []

for i in range(0, 10):
    x = round(random.uniform(-1000,1000),2)
    y = (2*x+1)
    tabuletson.append([x,y])

print(tabuletson)

wielomian = np.poly1d(np.polyfit(x,y,3))
linia = np.linspace(-2000,2000,2000)

plt.scatter(x,y)
plt.plot(linia,wielomian(linia))
plt.show()
1
Zarraki 24 mai 2020 à 19:52

5 réponses

Meilleure réponse

Tout ce que vous avez à faire est d'ajouter une ligne de code après et en dehors de votre boucle for. Cette commande créera deux listes contenant des valeurs x et y. Vous pouvez utiliser les mêmes noms de variables x et y.

x, y = zip(*tabuletson)

enter image description here

1
Sheldore 24 mai 2020 à 17:13

Les fonctions np.polyfit et plt.scatter que vous utilisez nécessitent des listes séparées de coordonnées X et Y.

Essayer:

import random
import numpy as np
import matplotlib.pyplot as plt

tabuletson_x = []
tabuletson_y = []

for i in range(0, 10):
    x = round(random.uniform(-1000,1000),2)
    y = (2*x+1)
    tabuletson_x.append(x)
    tabuletson_y.append(y)

print(tabuletson_x)
print(tabuletson_y)

wielomian = np.poly1d(np.polyfit(tabuletson_x,tabuletson_y,3))
linia = np.linspace(-2000,2000,2000)

plt.scatter(tabuletson_x,tabuletson_y)
plt.plot(linia,wielomian(linia))
plt.show()

Remarque: référencer x et y après le cycle for vous donnera les dernières valeurs de la liste générée aléatoirement:

list of x vals:  [-8.78, 554.81, -693.22, 955.8, 88.95, 235.55, -108.67, -804.08, 494.65, 754.58]
list of y vals:  [-16.56, 1110.62, -1385.44, 1912.6, 178.9, 472.1, -216.34, -1607.16, 990.3, 1510.16]
x:  754.58
y:  1510.16

Pour plus d'informations:

Documentation PyPlot Scatter

Documentation PolyFit

1
adamgy 24 mai 2020 à 17:20

Je pense que c'est une meilleure façon de faire ce que vous voulez en fonction du fonctionnement de plt.scatter et plt.plot. J'espère que cela fonctionne comme vous le souhaitez!

import random
import numpy as np
import matplotlib.pyplot as plt

x = []; y = []

for i in range(10):
    x.append(round(random.uniform(-1000,1000),2))
    y.append(2*x[i]+1)

wielomian = np.poly1d(np.polyfit(x,y,3))
linia = np.linspace(-2000,2000,2000)

plt.scatter(x,y)
plt.plot(linia,wielomian(linia))
plt.show()
1
Sebastián V. Romero 24 mai 2020 à 17:06

Vos x et y sont stockés dans votre liste tabuletson. Comme ceci: [[x0, y0], [x1, y1], ..., [x, y]]

Ainsi, vous pouvez, par exemple, obtenir la valeur de x1 et y1 avec x1 = tabuletson[1][0] et y1 = tabuletson[1][1]

C'est ta question?

0
Pablo 24 mai 2020 à 17:00
tabuletson = np.array(tabuletson)
X, Y = tabuletson[:,0], tabuletson[:,1]

X aura tous vos x de la liste
Et, Y aura tous vos y de la liste

0
Amit Kharel 24 mai 2020 à 17:00