---
title: "Box counting in Cython"
url: "https://edoardo.anteprime.edoardogabrielli.com/it/progetti/box-counting-cython"
lang: "it"
updated: "2026-11-01"
---

# Box counting in Cython

> cyboxcounting: estensione Cython che stima la dimensione frattale di un insieme di punti con il box counting, usando un albero.

Un'estensione Cython che stima la dimensione frattale di un insieme di punti contando le celle occupate, senza creare la griglia intera. L'ho scritta da solo in un mese, tra novembre e dicembre 2022.

## Il problema

Per misurare la dimensione di un attrattore con il box counting si conta quante celle di lato ε contengono almeno un punto. Con molti punti o molte dimensioni la griglia intera occupa troppa memoria. Ho usato un albero che si ramifica solo dove ci sono punti.

![Albero costruito sulla mappa di Hénon a quattro livelli](https://edoardo.anteprime.edoardogabrielli.com/media/originals/2026/11/ab6cd4c5705f4c3fa5f8adf3dd8c7a18/cyboxcounting-albero.webp)

## Come funziona

### 1. L'albero

Un albero N-ario ricorsivo scritto in C dentro Cython: ogni livello dimezza il lato delle celle e si creano solo i rami occupati. La memoria dell'albero si libera a mano con free().

### 2. Il fit

occupation conta le celle per ogni livello; fit_show fa il fit lineare con SciPy e mostra i grafici.

### 3. Prove

Sugli attrattori di Hénon e di Lorenz, con figure salvate nel repository.

![Conteggio delle celle e dimensione stimata per l'attrattore di Lorenz](https://edoardo.anteprime.edoardogabrielli.com/media/originals/2026/11/c0dcd49395d34287ba1d3e525320475f/cyboxcounting-lorenz.webp)

Attrattore di Lorenz. A destra la dimensione stimata dipende dalla scala (da 2,3 a 1,8): conta la scelta dell'intervallo su cui fare il fit.

### Cosa ho fatto io

Tutto il codice, 19 commit, circa 530 righe tra Cython e Python.

### Limiti

README di una riga, nessuna documentazione, prove fatte con script lanciati a mano. Non ho misurato quanto sia più veloce di una griglia, quindi non lo dichiaro.

**Stack:** Python, Cython, C, NumPy, SciPy, Matplotlib.

[Codice su GitHub](https://github.com/dodogabrie/cyboxcounting)

[← Tutti i progetti](https://edoardo.anteprime.edoardogabrielli.com/it/progetti)