numpy将数组从浮点数转换为字符串

发布于 2021-01-29 18:10:17

我有一个标准化的浮点数数组(即数组中最大的数字是1),我想将其用作图形的颜色索引。在使用matplotlib使用灰度时,这需要使用0到1之间的字符串,因此我想将float数组转换为字符串数组。我试图通过使用“
astype(’str’)”来执行此操作,但这似乎会创建一些与原始值不相同(甚至接近)的值。

我注意到这一点是因为matplotlib抱怨在数组中找到数字8,这很奇怪,因为它被标准化为1!

简而言之,我有一个float64的数组phis:

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

不为空。这令人费解,因为(希望是天真的)它似乎是numpy中的错误,我是否可能做错了什么导致此错误?

编辑:经过调查,这似乎是由于字符串函数处理高精度浮点的方式所致。使用向量化的toString函数(从robbles回答),情况也是如此,但是,如果lambda函数为:

lambda x: "%.2f" % x

然后图表开始工作-越来越好奇。(显然,数组不再相等!)

关注者
0
被浏览
322
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您对numpy数组在后台如何工作感到有些困惑。数组中的每个项目都必须具有 相同的大小

    浮点数的字符串表示无法通过这种方式工作。例如,repr(1.3)yields '1.3',但是repr(1.33)yields
    '1.3300000000000001'

    浮点数的准确字符串表示形式会生成 可变长度的 字符串。

    由于numpy数组由大小均相同的元素组成,因此numpy要求您在使用字符串数组时指定数组中字符串的长度。

    如果使用x.astype('str'),它将始终将内容转换为长度为1的字符串数组。

    例如,使用x = np.array(1.344566),会x.astype('str')产生'1'

    您需要更明确地使用'|Sx'dtype语法,其中dx是数组中每个元素的字符串长度。

    例如,用于x.astype('|S10')将数组转换为长度为10的字符串。

    更好的是,避免完全使用字符串的numpy数组。通常这是一个坏主意,从您对问题的描述中我看不出要首先使用它们的理由…



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看