Représentation en voxels 3D du logo de NumPy

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire montre comment utiliser la fonction Axes3D.voxels de Matplotlib pour créer un tracé de voxels 3D du logo de NumPy.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet d'étude pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques

Tout d'abord, nous devons importer les bibliothèques nécessaires, qui sont Matplotlib et NumPy.

import matplotlib.pyplot as plt
import numpy as np

Définir la fonction explode

Ensuite, nous définissons une fonction appelée explode qui sera utilisée pour agrandir l'image en voxels du logo de NumPy. Cette fonction prend un tableau NumPy en entrée et renvoie un nouveau tableau NumPy qui est deux fois plus grand que le tableau d'entrée.

def explode(data):
    size = np.array(data.shape)*2
    data_e = np.zeros(size - 1, dtype=data.dtype)
    data_e[::2, ::2, ::2] = data
    return data_e

Maintenant, nous pouvons commencer à construire le logo de NumPy en utilisant un tableau NumPy 3D appelé n_voxels. Nous définissons certains éléments du tableau sur True pour représenter la forme du logo. Nous définissons également deux autres tableaux NumPy appelés facecolors et edgecolors qui seront utilisés pour colorer les voxels.

n_voxels = np.zeros((4, 3, 4), dtype=bool)
n_voxels[0, 0, :] = True
n_voxels[-1, 0, :] = True
n_voxels[1, 0, 2] = True
n_voxels[2, 0, 1] = True

facecolors = np.where(n_voxels, '#FFD65DC0', '#7A88CCC0')
edgecolors = np.where(n_voxels, '#BFAB6E', '#7D84A6')

Agrandir l'image en voxels

Nous utilisons maintenant la fonction explode définie précédemment pour agrandir l'image en voxels, laissant des espaces entre chaque voxel.

filled = np.ones(n_voxels.shape)
filled_2 = explode(filled)
fcolors_2 = explode(facecolors)
ecolors_2 = explode(edgecolors)

Récapiser les espaces

Nous récapisons les espaces entre chaque voxel en modifiant les coordonnées de chaque voxel à l'aide de la fonction indices de NumPy.

x, y, z = np.indices(np.array(filled_2.shape) + 1).astype(float) // 2
x[0::2, :, :] += 0.05
y[:, 0::2, :] += 0.05
z[:, :, 0::2] += 0.05
x[1::2, :, :] += 0.95
y[:, 1::2, :] += 0.95
z[:, :, 1::2] += 0.95

Créer le tracé en voxels

Enfin, nous créons le tracé en voxels 3D à l'aide de la fonction voxels de la classe Axes3D dans Matplotlib.

ax = plt.figure().add_subplot(projection='3d')
ax.voxels(x, y, z, filled_2, facecolors=fcolors_2, edgecolors=ecolors_2)
ax.set_aspect('equal')

plt.show()

Sommaire

Ce laboratoire a démontré comment créer un tracé en voxels 3D du logo de NumPy à l'aide de Matplotlib. Nous avons utilisé NumPy pour construire le logo et la fonction Axes3D.voxels pour créer le tracé. Nous avons également utilisé une fonction appelée explode pour agrandir l'image en voxels du logo.