python - Numpy 将数组从 float 转换为字符串

标签 python numpy matplotlib

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

我注意到这一点是因为 matplotlib 提示在数组中找到数字 8,这很奇怪,因为它被归一化为 1!

简而言之,我有一个 float64 的数组 phi,这样:

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

不为空。这令人费解,因为(希望天真地)它似乎是 numpy 中的一个错误,有什么我可能做错了导致这种情况吗?

编辑:经过调查,这似乎是由于字符串函数处理高精度 float 的方式。使用矢量化的 toString 函数(来自 robbles 的答案),情况也是如此,但是如果 lambda 函数是:

lambda x: "%.2f" % x

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

最佳答案

您似乎对 numpy 数组如何在幕后工作感到有些困惑。数组中的每一项都必须大小相同

float 的字符串表示不能以这种方式工作。例如,repr(1.3) 产生 '1.3',但 repr(1.33) 产生 '1.3300000000000001'

float 的精确字符串表示会产生一个可变长度字符串。

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

如果你使用 x.astype('str'),它总是会将事物转换为长度为 1 的字符串数组。

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

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

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

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

关于python - Numpy 将数组从 float 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365520/

相关文章:

python - importlib.import_module 将 * 添加到全局变量?

python - Django 模板外键检查

python - 如何获得一维 numpy 数组中所有元素的乘积

python - python数组中None之间的第一个和最后一个数字

python - 在 matplotlib 中更改填充颜色

python - 仅在某些子图上带有颜色条的 ImageGrid

python - Python 2.7.9 (Linux) 中的 pip 在哪里

python - 如何通过在 Pandas 时间序列数据框中搜索数据来添加新列

python - 将 kivy 纹理转换为 opencv 图像

python - matplotlib/ basemap 没有河流的世界地图?