Numpy преобразование массива из числа с плавающей точкой в ​​строки

У меня есть массив чисел с плавающей запятой, который я нормализовал до единицы (т.е. наибольшее число в массиве равно 1), и я хотел использовать его в качестве цветовых индексов для графика . При использовании matplotlib для использования оттенков серого необходимо использовать строки от 0 до 1, поэтому я хотел преобразовать массив чисел с плавающей запятой в массив строк. Я пытался сделать это, используя "astype ('str')", но это, похоже, создает некоторые значения, которые не совпадают (или даже близки) к оригиналам.

Я замечаю это, потому что matplotlib жалуется на нахождение числа 8 в массиве, что является нечетным, поскольку оно было нормализовано до единицы!

Короче говоря, у меня есть массив phis типа float64, такой что:

numpy.where(phis.astype('str').astype('float64') != phis)

is не пусто. Это вызывает недоумение, поскольку (надеюсь, наивно) это похоже на ошибку в numpy. Могу ли я сделать что-нибудь неправильно, чтобы вызвать это?

Редактировать: после расследования, похоже, это связано с тем, как строковая функция обрабатывает высокие значения прецизионные поплавки. При использовании векторизованной функции toString (как из ответа robbles) это также верно, однако если лямбда-функция имеет вид:

lambda x: "%.2f" % x

Тогда построение графиков работает - страннее и интереснее. (Очевидно, что массивы больше не равны!)

19
задан VolatileStorm 20 March 2011 в 00:02
поделиться