为什么将浮点列表转换为numpy数组会改变某些变量的值?

时间:2016-01-23 06:04:05

标签: python numpy floating-point scikit-learn

所以我有以下代码片段:

with open('dataset/train/problem.csv', 'r') as p:
raw_x = csv.reader(p)
data_x = []
for ix in raw_x:
    data_x.append([float(i) for i in ix])
print(data_x)

这将打印以下输出:

[[217.0, 118.0, 0.63, 755.0, 1071.0], [217.0, 118.0, 0.63, 755.0, 1071.0],...]

现在我正在尝试将此结构转换为一个numpy浮点数组,以便我可以将它与scikit-learn一起用作观察输入。但是当我尝试做以下时

X = np.array(data_x)
print(X)

它给出了以下结果:

[  2.17000000e+02   1.18000000e+02   6.30000000e-01   7.55000000e+02
1.07100000e+03]
...
[  2.17000000e+02   1.18000000e+02   6.30000000e-01   7.55000000e+02
1.07100000e+03]

它仍然浮动,但十进制值不正确。

一直试图弄清楚为什么会发生这种情况,因为源数组也在浮点数中。我也试过提供type=floatastype,但似乎没有任何效果。

谢谢!

2 个答案:

答案 0 :(得分:1)

数组中的值相同。例如,2.1700000000e+22.17 x 10^2217,与原始数组中的相同。

numpy数组使用科学记数法而不是标准的十进制形式。

答案 1 :(得分:0)

列表和数组中的值相同。这只是一种不同的表现形式。

您可以使用科学记数法格式化Python float:

>>> '{:e}'.format(11.7)
'1.170000e+01'

NumPy使用这种表示方式。这就是全部。