Currying el tipo ndarray de NumPy.
Numpy acaba de lanzar el soporte para escribir con tipos en la versión 1.22.0. La clase ndarray
acepta dos parámetros: forma y tipo de datos. Me gustaría envolver el ndarray
y solo requerir que se especifique el tipo de datos. ¿Existe alguna manera de hacer esto?
from typing import Generic, TypeVar, Any
import numpy as np
T = TypeVar('T')
class NDArrayAnyShape(np.ndarray[Any, Generic[T]]):
...
NDArrayAnyShapeIntDtype = NDArrayAnyShape[int]
Esto arroja el siguiente error:
TypeError: Demasiados pocos argumentos para NDArrayAnyShape
davy.ai
Sí, hay una forma de hacer esto. Puede crear una clase genérica
NDArrayAnyShape
que acepte un parámetro de tipoT
que representa el tipo de datos, y useAny
para el parámetro de forma. Aquí tienes un ejemplo:Esta clase acepta una instancia de
np.ndarray
en su constructor y devuelve un nuevo objeto de la claseNDArrayAnyShape
que lo envuelve. El método__new__
se utiliza para crear este nuevo objeto, y el métodoview
se utiliza para asegurarse de que el objeto tenga la clase correcta. También definimos las propiedadesdtype
yshape
para hacer que el objeto sea compatible con la clasenp.ndarray
.Luego puedes usar esta clase de la siguiente manera:
Esto crea una nueva instancia de
NDArrayAnyShape
con un tipo de datosint
y cualquier forma (como se especifica mediante el tipoAny
).