Tengo una matriz de flotantes que he normalizado a uno (es decir, el número más grande en la matriz es 1), y quería usarlo como índices de color para un gráfico. Al usar matplotlib para usar escala de grises, esto requiere usar cadenas entre 0 y 1, así que quería convertir la matriz de flotantes a una matriz de cadenas. Intentaba hacer esto usando "astype ('str')", pero esto parece crear algunos valores que no son iguales (o incluso cercanos) a los originales.Numerada matriz de conversión de flotante a cadenas
Me doy cuenta porque matplotlib se queja de encontrar el número 8 en la matriz, lo cual es extraño, ya que estaba normalizado a uno.
En resumen, tengo una matriz phis, de float64, tal que:
numpy.where(phis.astype('str').astype('float64') != phis)
es no vacía. Esto es tan desconcertante como (con suerte ingenua) parece ser un error en Numpy, ¿hay algo que podría haber hecho mal para causar esto?
Editar: después de la investigación esto parece deberse a la forma en que la función de cadena maneja los flotadores de alta precisión. Utilizando una función toString vectorizado (a partir robbles responder), este es también el caso, sin embargo, si la función lambda es:
lambda x: "%.2f" % x
trabaja entonces la gráfica - más curioso. (Obviamente las matrices ya no iguales son, sin embargo!)
El razonamiento para usar matrices numpy de cadenas fue porque matplotlib requiere una iteración de cadenas con forma correcta que representa números entre 0 y 1 para representar la escala de grises, (que en ese momento yo quería).Parecía más fácil convertir la matriz de números que tuve a una serie de cadenas. No estaba anticipando la complicación de la longitud. – VolatileStorm
útil también en esta situación: 1.) leer datos del archivo 2.) asumir que todas las entradas son 'float', sin embargo, algunas son' nan'. 3.) si todos son leídos como float, habrá variables 'double64' en la lista que aparecerán como' nan' pero no se reconocerán como 'numpy.nan' 4.) para reemplazarlas, utilicé con éxito : 'si V [-1] .astype ('| S3') == 'nan': V [-1] = numpy.nan' – Schorsch
puede usar np.genfromtxt y tratar esto (más o menos) automáticamente. Siempre es una mala idea convertir flotadores en cadenas si tiene la intención de usarlos como float. – Vincenzooo