Cómo hacer clustering de tipos de datos mixtos en Python

En Python, no hay una cláusula struct como en C.

Pero todavía hay formas de crear tipos de datos personalizados, cada uno con sus propias ventajas y desventajas, pero con ninguno de estos está limitado a un solo tipo de datos (aunque los ejemplos solo muestran uno).

Python no se preocupa mucho por los tipos de datos, siempre que sean compatibles con las funciones.

El método más complicado es escribir una clase personalizada. Esto es muy similar a cómo se definen los tipos de datos integrados, pero implica un poco de código.

clase Pixel:
def __init __ (auto, rojo, verde, azul):
self.red = rojo
self.green = green
self.blue = azul

Entonces podemos instanciar un píxel y usarlo así:

pixel_white = Pixel (255, 255, 255) # píxel blanco

red_color_channel = pixel_white.red # 255

Algunos problemas al usar las clases es que son mutables y su representación no es muy útil. Además, debe hacer su propia verificación de tipo:

pixel_white.alpha = 0 # esto es legal

imprimir (pixel_white)
#
# Esto se puede cambiar definiendo un método __repr__ personalizado

En resumen, las clases te dan toda la flexibilidad del mundo, pero a veces solo quieres algo simple.

Aquí vienen las tuplas:

punto3d = (150, 0, 255) # XYZ

La principal ventaja es la poca cantidad de código que se necesita para crear uno.

# Acceso a un solo campo
print (punto 3d [0]) # 150

Dado que las tuplas no tienen campos con nombre de concepto, debe acceder a ellas por índice.

Como las tuplas son inmutables, no puede cambiar campos individuales. Tienes que destruir el objeto y crear uno nuevo.

# Las tuplas son inmutables
punto3d [0] = 5 # ilegal

punto3d = (5, 0, 255) # XYZ

La representación de objetos Tuples es más útil que la clase personalizada, pero aún no nos dice mucho acerca de lo que significan los números.

print (punto3d) # (150, 0, 255)

Como alternativa, también hemos nombrado tuplas, que es justo lo que dice; tuplas con nombre. Las tuplas con nombre resuelven muchos de los problemas con las tuplas ordinarias, pero conservan su inmutabilidad.

Se definen así:

de colecciones importadas namedtuple

p1 = namedtuple (‘Point3D’, ‘xy z’) (150, 0, 255)

# Acceso al valor único
x_coordinate = p1.x # 150
y_coordinado = p1 [1] # 0

# representación de objeto
print (p1) # Point3D (x = 150, y = 0, z = 255)

p1.x = 5 # es ilegal

Vemos que la representación de objetos ahora es realmente muy útil, y podemos acceder a los valores por nombre y por índice.

Además, no podemos cambiar los valores sin destruir el objeto, y la sintaxis de creación de objetos es un poco extraña.

En Python 3.6 se agregó una nueva forma de definir tuplas con nombre. Ahora, puede hacer una clase que herede una clase de tupla con nombre así:

de escribir import NamedTuple

Clase de coche (NamedTuple):
color: str
kilometraje: flotador
automático: bool

my_car = Car (“rojo”, 21.1, verdadero)
my_second_car = Auto (color = “verde”, kilometraje = 28.5, automático = Falso)

# representación de objeto
print (my_car) # Car (color = ‘rojo’, kilometraje = 21.1, automático = True)

# acceso al valor único
my_car_color = my_car.color # red
my_second_car_color = my_second_car [0] # verde

# la clase de coches sigue siendo inmutable
my_car.color = “black” # ilegal
my_car.price = 15000 # ilegal

Finalmente, también está el tipo de diccionario incorporado que de muchas maneras funciona de manera similar a una tupla mutable, llamada, pero sin el índice.

point3d = {
“x”: 150,
“y”: 0,
“z”: 250,
}

# representación de objeto
print (point3d) # {‘x’: 150, ‘y’: 0, ‘z’: 250}

# acceder a un solo valor
x_coordinate = point3d [“x”]

# mutabilidad
point3d [“x”] = 5 # es legal
point3d [“coord_system”] = “el mejor” # es legal

La forma en que debe definir nuevos tipos de datos mixtos depende de la situación, pero ahora tiene algunas herramientas para compensar la cláusula de estructura faltante.

More Interesting

¿Hay algún proyecto de aprendizaje automático de código abierto al que un principiante pueda contribuir?

¿El procesamiento del lenguaje natural reemplaza la búsqueda elástica?

¿Ha publicado Factual.com algún trabajo de investigación (o algún asunto técnico importante) sobre las técnicas de aprendizaje automático que utilizan para rastrear y extraer de la web?

¿El CAPM está muerto, en el sentido de que el aprendizaje automático moderno y el modelado financiero han hecho que su aplicación en el mundo real sea redundante?

¿Cuál es el proceso de reconocimiento de voz (en resumen)?

¿Se mejorará la mayor ganancia en el reconocimiento de objetos en los algoritmos de representación y aprendizaje, en lugar de modelos simples y datos más grandes?

¿Cuál es la mejor manera de personalizar los artículos para un usuario en función de su historial de lectura?

¿Qué universidades de la India son buenas para realizar investigaciones en el aprendizaje por refuerzo?

En el aprendizaje profundo, ¿cómo convertir una oración o documento en un vector binario (flujo de 0 y 1)?

Cómo usar big integer en C ++

¿Has utilizado Google Translate recientemente? ¿Cómo es la calidad de la traducción con su nueva traducción automática neuronal? ¿Cómo es para cualquier par de idiomas?

¿Hay alguna diferencia entre los codificadores automáticos y el codificador-decodificador en el aprendizaje profundo?

¿Cuándo puede el aprendizaje profundo ser una herramienta inadecuada para una empresa?

¿Qué sugerencias le daría Roman Trusov a una persona que acaba de ingresar a ML?

¿Las computadoras son ahora jugadores de póker más fuertes que los humanos?