uint8 type float convert array python numpy decimal

python - float - type numpy array



numpy array con dtype Decimal? (3)

Desafortunadamente, debes convertir cada uno de tus elementos en Decimal cuando crees numpy.array. Algo como

s = [[''123.123'',''23''],[''2323.212'',''123123.21312'']] decimal_s = [[decimal.Decimal(x) for x in y] for y in s] ss = numpy.array(decimal_s)

¿Los dtypes decimales están disponibles en numpy?

>>> import decimal, numpy >>> d = decimal.Decimal(''1.1'') >>> s = [[''123.123'',''23''],[''2323.212'',''123123.21312'']] >>> ss = numpy.array(s, dtype=numpy.dtype(decimal.Decimal)) >>> a = numpy.array(s, dtype=float) >>> type(d) <class ''decimal.Decimal''> >>> type(ss[1,1]) <class ''str''> >>> type(a[1,1]) <class ''numpy.float64''>

Supongo que numpy.Array no es compatible con todos los tipos, pero en cierto modo pensé que al menos permitiría que un dtype se propagara tanto como pudiera siempre que se definieran las operaciones correctas. ¿Me estoy perdiendo de algo? ¿Hay alguna forma de que esto funcione?


Numpy no reconoce decimal.Decimal como un tipo específico. Lo más cercano que puede obtener es el tipo más general, objeto. Por lo tanto, al convertir los elementos al tipo de letra deseado, la conversión no es operativa.

>>> ss.dtype dtype(''object'')

Tenga en cuenta que debido a que los elementos de la matriz son objetos de Python, no obtendrá mucha aceleración al usarlos. Por ejemplo, si intenta agregar esto a cualquier otra matriz, los otros elementos tendrán que volverse a encapsular en objetos de Python y agregarse mediante el código de adición de Python normal. Puede ganar algo de velocidad ya que la iteración estará en C, pero no tanto.


CAVEAT IMPORTANTE: ESTA ES UNA MALA RESPUESTA

Así que respondí esta pregunta antes de entender realmente el sentido. La respuesta fue aceptada, y tiene algunos votos ascendentes, pero probablemente sea mejor pasar a la siguiente.

Respuesta original:

Parece que Decimal está disponible:

>>> import decimal, numpy >>> d = decimal.Decimal(''1.1'') >>> a = numpy.array([d,d,d],dtype=numpy.dtype(decimal.Decimal)) >>> type(a[1]) <class ''decimal.Decimal''>

No estoy seguro exactamente de lo que intentas lograr, tu ejemplo es más complicado de lo que es necesario para simplemente crear una matriz numpy decimal.