在python中的一个简单的重新排列中,当按列名索引时,输出值会被截断:
var list = data.Where(!t.Area.HasValue || t => t.Area == response.Area).Select(t => new Status()
{
PK = t.PK,
Area = t.Area,
Description = t.Area.HasValue ? a : b
//other stuff
}).ToList();
为什么会这样?我可以使用列索引获取完整的非截断值吗?
答案 0 :(得分:1)
数字数组的打印精度为8位数:
In [250]: np.get_printoptions()
Out[250]:
{'edgeitems': 3,
'formatter': None,
'infstr': 'inf',
'linewidth': 75,
'nanstr': 'nan',
'precision': 8,
'suppress': False,
'threshold': 1000}
但是在显示重新排列或其记录时它不会使用该值。您可能还会看到带有标量值的较长打印件:
print arr['a'].item()
==============
In [252]: arr = np.zeros(1, dtype=[('a', np.float)])
...: arr[0]['a'] = 0.1234567891234
...:
In [253]: arr
Out[253]:
array([(0.1234567891234,)],
dtype=[('a', '<f8')])
In [254]: arr[0]
Out[254]: (0.1234567891234,)
In [255]: arr['a']
Out[255]: array([ 0.12345679])
In [256]: arr['a'].item()
Out[256]: 0.1234567891234
In [257]: arr['a'][0]
Out[257]: 0.1234567891234
==================
https://github.com/numpy/numpy/issues/5463
array2string handles floats differently for structured array and ndarray
触及这一点。结构化数组记录中的数字格式不遵循print options
。
答案 1 :(得分:0)
正如其他人所说,这是印刷精度的问题。您可以使用set_printoptions
:
import numpy
numpy.set_printoptions(precision=20)
arr = numpy.zeros(1, dtype=[('a', numpy.float)])
arr[0]['a'] = 0.1234567891234
print arr
print arr['a']
> [(0.1234567891234,)]
> [ 0.12345678912339999589]