NumPy结构化数组中的浮点数和使用.format()进行本地字符串格式化。

4

有人可以告诉我为什么这个NumPy记录在使用Python的新式字符串格式化时出现问题吗?记录中的所有浮点数都无法处理"{:f}".format(record)

谢谢您的帮助!

In [334]: type(tmp)
Out[334]: numpy.core.records.record

In [335]: tmp
Out[335]: ('XYZZ', 2001123, -23.823917388916016)

In [336]: tmp.dtype
Out[336]: dtype([('sta', '|S6'), ('ondate', '<i8'), ('lat', '<f4')])

# Some formatting works fine
In [337]: '{0.sta:6.6s} {0.ondate:8d}'.format(tmp)
Out[337]: 'XYZZ    2001123'

# Any float has trouble
In [338]: '{0.sta:6.6s} {0.ondate:8d} {0.lat:11.6f}'.format(tmp)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/Users/jkmacc/python/pisces/<ipython-input-338-e5f6bcc4f60f> in <module>()
----> 1 '{0.sta:6.6s} {0.ondate:8d} {0.lat:11.6f}'.format(tmp)

ValueError: Unknown format code 'f' for object of type 'str'
1个回答

0
这个问题在NumPy用户邮件列表下的"使用"{:f}".format(),将浮点数强制转换为字符串?"中得到了回答:
似乎np.int64/32和np.str继承了它们各自的本地Python __format__(),但np.float32/64没有得到__builtin__.float.__format__()。这并不直观,但现在我明白为什么会这样工作了:
In [8]: '{:6.6s} {:8d} {:11.6f}'.format(tmp.sta, tmp.ondate, float(tmp.lat))
Out[8]: 'XYZZ    2001123  -23.820000'

谢谢!

- Jon

编辑:如果您的系统是32位,则np.float32/int32继承自本机Python类型。64位也是如此。不匹配将生成与原始帖子相同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接