The sketch-a-day archives and tip jar are at: https://abav.lugaralgum.com/sketch-a-day Code for this: https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_10 #Processing #Python #py5 #CreativeCoding
Fine, rette linjer med Matplotlib
Jeg holder på å skrive om likningen til en rett linje. I den forbindelse har jeg laget noen enkle figurer i Matplotlib som illustrerer likningen, stigningstallet og konstantleddet. Jeg viser blant annet hvordan vi kan få navn og piler på aksene.
Disse tegningene ble brukt til å illustrere Skrive matematikk med LaTeX
Innhold
Oppsett
Funksjoner og biblioteker
Laster inn biblioteker og funksjoner jeg har tenkt å bruke.
import matplotlib.pyplot as plt import numpy as np from itertools import cycleMatplotlib-instillinger
Endrer standardinstillingene til Matplotlib. Gjør grafvinduet bredere og teksten større.
plt.rcParams['figure.figsize'] = 10, 5 plt.rcParams['font.size'] = 20figure.figsize er bredde, høyde i tommer. Siden oppløsningen er 72 dpi (punkter per tommer) blir bredden 720 piksler. Denne størrelsen passer bra med bredden på WordPress-temaet mitt.
Fargesykel
Siden jeg skal tegne flere figurer vil jeg at hver figur skal få sin egen farge. Jeg lager meg et cycle-objekt. Hver gang jeg kaller next-funksjonen med denne som argument vil jeg få en ny farge. Når listen er tom begynner den på starten igjen.
Tegneparametre
Setter parametre som skal være felles for alle grafene. Dette er stigningstall, konstantledd, $x$-verdiene vi skal tegne linjen fra og til og til slutt hvor vi vil markere $x_1$
a0, b0, xstart0, xslutt0, x1_0 = 0.5, 0.5, -.5, 2.5, .5Piler og navn på aksene
Lager en funksjon som setter opp aksene med piler og navn i det eksisterende tegnevinduet.
def tegnevindu(): """ Funksjon som setter opp et tegnevindu med piler og navn på aksene. Returns ------- ax : matplotlib.axes.Axes Det ferdige akseobjektet """ # Henter ut det eksisterende akseobjektet. ax = plt.gca() # Flytter venstre- og nedreaksen til henholdsvis x = 0 og y = 0. ax.spines["left"].set_position("zero") ax.spines["bottom"].set_position("zero") # Skjuler høyre- og toppaksen ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) # Tegner piler som svarte trekanter: ">k" på slutten av aksene. # Koordinatene sammen med transform-argumentet gjør at trekantene alltid # kommer på enden av aksene. ax.plot(1, 0, ">k", transform=ax.get_yaxis_transform(), clip_on=False) ax.plot(0, 1, "^k", transform=ax.get_xaxis_transform(), clip_on=False) # Gir navn på aksene og flytter aksenavnene til enden av aksen. ax.set_xlabel("x", loc="right") ax.set_ylabel("y", loc="top") # Fjerner aksemerkene ax.set_xticks([]) ax.set_yticks([]) # Returnerer akseobjektet. return ax ax = tegnevindu() plt.show()gca henter ut det eksisterende akseobjektet som pyplot bruker eller oppretter et nytt akseobjekt i pyplot dersom det ikke finnes.
Dette gjør at
ax = plt.gca() ax.plot([1, 2, 3], [1, 3, 2])Tilsvarer
plt.plot([1, 2, 3], [1, 3, 2])Tegne-metodene til akseobjektet er de samme eller nesten de samme som tegne-funksjonene til pyplot. Ofte er forskjellen at metodene starter med set_ eller get_. For eksempel bruker pyplot xlabel-funksjonen til å sette navn på x-aksen, mens akseobjektet bruker set_xlabel-metoden til å gjøre det samme.
Tegne rett linje
Lager en funksjon som tegner en rett linje.
def tegn_linje(a=a0, b=b0, xstart=xstart0, xslutt=xslutt0): # Henter ut en ny farge farge = next(farger) # Setter opp tegnevinduet ax = tegnevindu() # Lager en funksjon for å finne y-verdiene til den rette linjen. def f(x): return a*x + b # Lager en liste med x-verdier xverdier = np.linspace(xstart, xslutt) # Tegner den rette linjen gitt ved y = ax + b i akseobjektet. ax.plot(xverdier, f(xverdier), color=farge) # Gir x- og y-aksen de samme proporsjonene ax.axis('scaled') # Returnerer akseobjektet sammen med funksjonen vi laget for y. # Dette gjør at vi ikke trenger å lage en ny funksjon når vi skal # jobbe videre med grafen. return ax, f tegn_linje() plt.show()Ettpunktsformel
Lager en funksjon som markerer punktet $(x1, y1)$ på den rette linjen som et punkt med tekst.
def tegn_ettpunktsformel(a = a0, b=b0, xstart = xstart0, xslutt=xslutt0, x1=x1_0): # Tegner den rette linjen ax, f = tegn_linje(a, b, xstart, xslutt) # Regner ut den tilsvarende y-verdien y1 = f(x1) # Markerer punktet (x1, y2) ax.scatter(x1, y1, color="black") ax.text(x1, y1, r"$(x_1, y_1)$", ha="right", va="bottom") # Returnerer akseobjektet return ax ax = tegn_ettpunktsformel() plt.show()Likning
Lager en funksjon som markerer konstantleddet, $b$, på $y$-aksen og stigningstallet, $a$, som en trekant mellom $x_1$ og $x_1 + 1$ med høyde $a$.
def tegn_likning(a=a0, b=b0, xstart=xstart0, xslutt=xslutt0, x1=x1_0): # Tegner den rette linjen. ax, f = tegn_linje(a, b, xstart, xslutt) # Regner ut x2, y1, og y2 x2 = x1 + 1 y1, y2 = f(x1), f(x2) # Tegner trekanten. ax.plot([x1, x2, x2], [y1, y1, y2], color="black") # Markerer den rette vinkelen i (x2, y1). ax.plot([x2, x2 - 0.1, x2 - 0.1], [y1 + 0.1, y1 + 0.1, y1], color="black") # Setter tall på grunnlinjen og gir navn på høyden. ax.text((x1 + x2)/2, y1, 1, va="top") ax.text(x2, (y1 + y2)/2, "a", ha="left") # Markerer lengden b og setter navn ax.plot([0, 0], [0, b], color="black") ax.text(0, b/2, "b", va="center", ha="right") # Returnerer akseobjektet return ax ax = tegn_likning() plt.show()Stigningstall
Lager en funksjon som markerer $(x_1, y_1)$ og $(x_2, y_2)$ og viser $\Delta x$ og $\Delta y$ som katetene i en rettvinklet trekant.
def tegn_stigningstall(a=a0, b=b0, xstart=xstart0, xslutt=xslutt0, x1=x1_0): # Tegner den rette linjen. ax, f = tegn_linje(a, b, xstart, xslutt) # Regner ut x2, y1, og y2 x2 = x1 + 1 y1, y2 = f(x1), f(x2) # Markerer (x1, y1) og (x2, y2) ax.scatter([x1, x2], [y1, y2], color="black") # Tegner trekanten. ax.plot([x1, x2, x2], [y1, y1, y2], color="black") # Markerer den rette vinkelen i (x2, y1). ax.plot([x2, x2 - 0.1, x2 - 0.1], [y1 + 0.1, y1 + 0.1, y1], color="black") # Markerer (x1, y1) og (x2, y2) ax.text(x1, y1, r"$(x_1, y_1)$", ha="right", va="bottom") ax.text(x2, y2, r"$(x_2, y_2)$", ha="right", va="bottom") # Markerer katetene i trekanten ax.text((x1 + x2)/2, y1, r"$\Delta x = x_2 - x_1$", va="top", ha="center") ax.text(x2, (y1 + y2)/2, r"$\Delta y = y_2 - y_1$", ha="left") # Returnerer akseobjektet return ax ax = tegn_stigningstall() plt.show() #akse #aksepil #aksetittel #Axes #cycle #ettpunktsformel #gca #itertools #konstantledd #matplotlib #numpy #plot #rettLinje #stigningstall #trekant#Python's #itertools is a smash isn't it?
[Перевод] 10 приёмов профессионала для ускорения кода на Python
Команда Python for Devs подготовила перевод статьи о том, как делать код на Python быстрее без переписывания проектов с нуля. В статье 10 практичных приёмов — от sets и bisect до локальных функций и предвыделения памяти — которые дают реальный прирост скорости в типовых сценариях.
https://habr.com/ru/articles/969848/
#python #оптимизация #оптимизация_кода #производительность #sets #bisect #itertools #память #циклы #скорость
Магия itertools: Перестаньте писать велосипеды на циклах for
Почему опытные Python-разработчики редко используют циклы for для обработки данных? Потому что императивный стиль на больших объемах данных ведет к исчерпанию памяти (OOM) и замедлению работы. Модуль itertools — это стандарт индустрии для создания эффективных конвейеров обработки данных. Он реализует концепцию ленивых вычислений (lazy evaluation), позволяя обрабатывать бесконечные потоки или огромные дампы БД, потребляя константный объем RAM.
itertools для тех, кто думал, что знает itertools
Привет, Хабр! Модуль itertools мне известен многим вдоль и поперёк. Ну действительно, что там сложного? Пара функций вроде chain да product , и кажется, что ничего нового для себя уже не найти. Однако стоит копнуть глубже, и выясняется, что у itertools есть немало нюансов и даже новых возможностей, появившихся в свежих версиях. В этой статье рассмотрим многие функции itertools : от базовых до самых интересных. Понять силу итераторов
I need to add #itertools groupby in my classes :)
https://wesmckinney.com/book/python-builtin#generators_itertools
[Formations #Python] Dernière formation de l'année "Les structures avancées avec #Python"
N'hésitez pas à nous contacter pour vous inscrire
📅 le 16 décembre en ligne
#python#pythonscientifique #machinelearning #Pythonavancées
#données #algorithmique #ai #algo
#itertools #generateur #decorateur