У меня есть массив поплавков, который я нормализовал к одному (т.е. наибольшее число в массиве равно 1), и я хотел использовать его в качестве цветовых индексов для графика. В использовании matplotlib для использования оттенков серого для этого требуется использовать строки от 0 до 1, поэтому я хотел преобразовать массив float в массив строк. Я пытаюсь сделать это, используя "astype (" str ")", но это создает некоторые значения, которые не совпадают (или даже близки) к оригиналам.
Я замечаю это, потому что matplotlib жалуется на поиск числа 8 в массиве, что является нечетным, поскольку оно было нормализовано для одного!
Короче говоря, у меня есть массив phis, float64, такой, что:
numpy.where(phis.astype('str').astype('float64') != phis)
не пусто. Это озадачивает, как (надеюсь, наивно), похоже, это ошибка в numpy, есть ли что-нибудь, что я мог бы сделать неправильно, чтобы вызвать это?
Изменить: после исследования это, по-видимому, связано с тем, как функция string обрабатывает высокоточные поплавки. Использование векторизованной функции toString (как из ответа грабителей), это также имеет место, однако, если лямбда-функция:
lambda x: "%.2f" % x
Тогда графическое произведение работает - любопытно и любопытно. (Очевидно, что массивы уже не равны!)