es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Inicialice una matriz ndarray de numpy en pydantic

¿Cómo puedo inicializar un ndarray al usar pydantic?
Este código genera un ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

from pydantic.dataclasses import dataclass
import numpy as np

@dataclass
class TestNumpyArray:
    numpyArray: np.ndarray = np.zeros(10)

testNumpyArray = TestNumpyArray()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Cuando inicialices un ndarray con Pydantic, no debes proporcionar un valor predeterminado en la definición de la dataclass. En su lugar, puedes inicializar el ndarray en el método __post_init__ de la clase. Aquí tienes un ejemplo:

    from pydantic.dataclasses import dataclass
    import numpy as np
    
    @dataclass
    class TestNumpyArray:
        numpyArray: np.ndarray = None
    
        def __post_init__(self):
            if self.numpyArray is None:
                self.numpyArray = np.zeros(10)
    

    En este ejemplo, el atributo numpyArray no tiene un valor predeterminado en la definición de la dataclass. En su lugar, el array se inicializa en el método __post_init__, el cual verifica si el atributo es None y, en caso afirmativo, lo establece como un array de 10 elementos lleno de ceros utilizando np.zeros(10).

    Este enfoque evita el ValueError causado por la ambigüedad del valor de verdad de un array de numpy, el cual puede tener múltiples elementos.

Comments are closed.