一个合作者和我注意到了纽比身上一些我们不理解的奇怪的东西。使用python3.5.4和numpy版本1.14.2-py35ha9ae307_1(加上我更新的较早版本,以防万一)会发生这种情况。在
问题似乎是,如果将一个float与一些字符串一起添加到numpy数组中,那么float将按预期转换为字符串,但有时(很少)float会以非常奇怪的方式被截断。我不知道这是一个错误还是一些我们不理解的行为。不管怎样,这看起来很奇怪。任何洞察力都是有用的。在
可复制示例
import numpy as np
p = np.empty([1,2],dtype='U21')
a = 4.4226657709978134e-05
p[0] = np.array(['string',a])
p
# WTF
Out[5]: array([['string', '4.4226657709978134e-0']], dtype='<U21')
这也取决于浮点数的最后一位
^{pr2}$这个问题很容易解决,例如,通过切换到可以处理不同类型的Pandas数据帧。但这种行为似乎很奇怪。我们之所以注意到这一点,是因为我们在数百万个数字上做了这项工作,并且通过健全性检查突出显示了这一点(我们所有的数字都应该是<;1,而且我们偶尔会得到数字>1)。在
这可不是什么纽比的事。见https://stackoverflow.com/a/25899600/982257
Python(3)通常将float表示为具有最少位数的字符串,以清楚地表示特定的float值。在
在}的情况下,两者都不是由IEEE双精度表示的。在
4.4226657709978137e-05
和{4.4226657709978137e-05
的情况下,它最短的明确表示恰好是22个字符,而不是21个字符,因此当您试图将其填充到<U21
中时,它会被截断。在要表示科学记数法中的大多数双数,您至少需要24个字符。在
如果要在数组中混合字符串和浮点,则不需要使用
pandas
。Object dtype工作(这就是pandas
使用的)或结构化数据类型:
^{pr2}$相关问题 更多 >
编程相关推荐