261 combinations of 3 connected segments, on a 3x3 grid of points. Removing rotations and translations. #itertools
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
  • Piler og navn på aksene
  • Tegne rett linje
  • Ettpunktsformel
  • Likning
  • Stigningstall

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 cycle

Matplotlib-instillinger

Endrer standardinstillingene til Matplotlib. Gjør grafvinduet bredere og teksten større.

plt.rcParams['figure.figsize'] = 10, 5 plt.rcParams['font.size'] = 20

figure.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.

farger = cycle(['tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:olive', 'tab:cyan'])

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, .5

Piler 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
itertools — Functions creating iterators for efficient looping

This module implements a number of iterator building blocks inspired by constructs from APL, Haskell, and SML. Each has been recast in a form suitable for Python. The module standardizes a core set...

Python documentation

[Перевод] 10 приёмов профессионала для ускорения кода на Python

Команда Python for Devs подготовила перевод статьи о том, как делать код на Python быстрее без переписывания проектов с нуля. В статье 10 практичных приёмов — от sets и bisect до локальных функций и предвыделения памяти — которые дают реальный прирост скорости в типовых сценариях.

https://habr.com/ru/articles/969848/

#python #оптимизация #оптимизация_кода #производительность #sets #bisect #itertools #память #циклы #скорость

10 приёмов профессионала для ускорения кода на Python

Команда Python for Devs подготовила перевод статьи о том, как делать код на Python быстрее без переписывания проектов с нуля. В статье 10 практичных приёмов — от sets и bisect до локальных функций и...

Хабр

Магия itertools: Перестаньте писать велосипеды на циклах for

Почему опытные Python-разработчики редко используют циклы for для обработки данных? Потому что императивный стиль на больших объемах данных ведет к исчерпанию памяти (OOM) и замедлению работы. Модуль itertools — это стандарт индустрии для создания эффективных конвейеров обработки данных. Он реализует концепцию ленивых вычислений (lazy evaluation), позволяя обрабатывать бесконечные потоки или огромные дампы БД, потребляя константный объем RAM.

https://habr.com/ru/articles/969544/

#itertools #python #python3 #python_для_начинающих

Магия itertools: Перестаньте писать велосипеды на циклах for

1. Введение: Проблема избыточной вложенности и алгоритмической неэффективности В профессиональной разработке на Python одной из наиболее распространенных проблем, с которыми сталкиваются специалисты...

Хабр
Ah yes, the age-old quest for #programming enlightenment: writing Fizz Buzz without so much as a hint of logic 🙄. Our intrepid coder Evan has managed to turn the venerable challenge into a Pythonic #circus act, cycling through sequences like a caffeine-fueled hamster on a wheel 🚴‍♂️. Who needs simplicity when you can overcomplicate everything with itertools? 🤹‍♂️
https://evanhahn.com/fizz-buzz-without-conditionals-or-booleans/ #FizzBuzz #Python #coding #itertools #HackerNews #ngated
Fizz Buzz without conditionals or booleans

I got nerd-sniped and had to try to solve this.

itertools для тех, кто думал, что знает itertools

Привет, Хабр! Модуль itertools мне известен многим вдоль и поперёк. Ну действительно, что там сложного? Пара функций вроде chain да product , и кажется, что ничего нового для себя уже не найти. Однако стоит копнуть глубже, и выясняется, что у itertools есть немало нюансов и даже новых возможностей, появившихся в свежих версиях. В этой статье рассмотрим многие функции itertools : от базовых до самых интересных. Понять силу итераторов

https://habr.com/ru/companies/otus/articles/958068/

#python #программирование #itertools #итераторы

itertools для тех, кто думал, что знает itertools

Привет, Хабр! Модуль itertools мне известен многим вдоль и поперёк. Ну действительно, что там сложного? Пара функций вроде chain да product , и кажется, что ничего нового для себя уже...

Хабр
Python for Data Analysis, 3E - 3  Built-In Data Structures, Functions, and Files

[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