Representación de voxeles 3D del logotipo de NumPy

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica demuestra cómo utilizar la función Axes3D.voxels de Matplotlib para crear un gráfico de voxeles 3D del logotipo de NumPy.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar bibliotecas

En primer lugar, necesitamos importar las bibliotecas necesarias, que son Matplotlib y NumPy.

import matplotlib.pyplot as plt
import numpy as np

Definir la función explode

A continuación, definimos una función llamada explode que se utilizará para aumentar en tamaño la imagen de voxeles del logotipo de NumPy. Esta función toma una matriz de NumPy como entrada y devuelve una nueva matriz de NumPy que es el doble del tamaño de la matriz de entrada.

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

Construir el logotipo de NumPy

Ahora podemos comenzar a construir el logotipo de NumPy utilizando una matriz de NumPy 3D llamada n_voxels. Establecemos ciertos elementos de la matriz en True para representar la forma del logotipo. También definimos otras dos matrices de NumPy llamadas facecolors y edgecolors que se utilizarán para colorear los voxeles.

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')

Aumentar en tamaño la imagen de voxeles

Ahora utilizamos la función explode definida anteriormente para aumentar en tamaño la imagen de voxeles, dejando espacios entre cada voxel.

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

Reducir los espacios

Reducimos los espacios entre cada voxel modificando las coordenadas de cada voxel utilizando la función 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

Crear la representación de voxeles

Finalmente, creamos la representación de voxeles 3D utilizando la función voxels de la clase Axes3D en 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()

Resumen

Esta práctica demostró cómo crear una representación de voxeles 3D del logotipo de NumPy utilizando Matplotlib. Utilizamos NumPy para construir el logotipo y la función Axes3D.voxels para crear la representación. También utilizamos una función llamada explode para aumentar en tamaño la imagen de voxeles del logotipo.