numpy vstack后出现浮点数错误

3


我在使用numpy的vstack函数时遇到了问题,涉及到浮点数和指数e-5。
item_array和date_array都是numpy.ndarray类型。
当我使用data = np.vstack((date_array,item_array))时,元素3.04871703e-05变成了3.0487170344。其他元素没有问题。是否有人能帮我解决这个问题?谢谢。

在[2]处:项目数组
输出[2]:
数组([0.00000000e + 00,-1.81992510e-03,-9.44964473e-03,
-3.12464669e-03,-5.42864845e-03,-1.67769866e-03,
3.04871703e-05,-7.81295968e-03,-1.12972557e-02,
-1.69797339e-02,-1.22161657e-02,-1.93931514e-02,
-1.11389637e-02,-7.59505250e-03,5.65141213e-03,
4.81559901e-03,-1.37724956e-02,-1.51201763e-02,
-2.55894748e-02,-2.48333169e-02,-2.56770574e-02,
-3.21192961e-02,-2.71028609e-02,-2.84357450e-02])

在[3]处:日期数组
输出[3]:
数组(['“2016-05-03”','“2016-05-04”','“2016-05-05”','“2016-05-06”',
'“2016-05-07”','“2016-05-08”','“2016-05-09”','“2016-05-10”',
'“2016-05-11”','“2016-05-12”','“2016-05-13”','“2016-05-14”',
'“2016-05-15”','“2016-05-16”','“2016-05-17”','“2016-05-18”',
'“2016-05-19”','“2016-05-20”','“2016-05-21”','“2016-05-22”',
'“2016-05-23”','“2016-05-24”','“2016-05-25”','“2016-05-26”' ],
dtype ='| S12')

在[4]处:数据 = np.vstack((date_array,item_array))

在[5]处:数据
输出[5]:
数组(['“2016-05-03”','“2016-05-04”','“2016-05-05”','“2016-05-06”',
'“2016-05-07”','“2016-05-08”','“2016-05-09”','“2016-05-10”',
'“2016-05-11”','“2016-05-12”','“2016-05-13”','“2016-05-14”',
'“2016-05-15”','“2016-05-16”','“2016-05-17”','“2016-05-18”',
'“2016-05-19”','“2016-05-20”','“2016-05-21”','“2016-05-22”',
'“2016-05-23”','“2016-05-24”','“2016-05-25”','“2016-05-26”' ],
[ '0.0','-0.001819925','-0.009449644','-0.003124646',
'-0.005428648','-0.001677698','3.0487170344','-0.007812959'


1
这只是一个显示问题,真正的基础值仍然符合预期吗? - EdChum
请查看 https://docs.python.org/2/tutorial/floatingpoint.html,可能会有所帮助。 - Andriy Ivaneyko
1
在您的情况下,dtype 是 S12,因此最后的条目可能会被截断?当它是S32时,我仍然可以看到e-5。我无法重现您的方式,当我完全相同地操作时,我得到了一个dtype为 '|S32' 的numpy数组。 - Sosel
你为什么要用一个字符串数组来堆叠浮点数数组? - hpaulj
1
你使用的 numpy 版本是什么?在我的测试中,日期数组是 S12,结果是 S32,其中有空间存储 '3.04871703e-05'。为什么日期有额外的引号层? - hpaulj
我将item_array的类型从float更改为string '|S32',然后它就可以工作了。非常感谢。在[2]中:type(item_array [0])Out [2]:numpy.float64 在[3]中:item_array = item_array.astype('|S32')在[4]中:type(item_array [0])Out [4]:numpy.string_ - Peter
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1
我把你的脚本写成了这样:

import numpy as np

item_array = np.array([0.00000000e+00, -1.81992510e-03, -9.44964473e-03,
                       -3.12464669e-03, -5.42864845e-03, -1.67769866e-03,
                       3.04871703e-05, -7.81295968e-03, -1.12972557e-02,
                       -1.69797339e-02, -1.22161657e-02, -1.93931514e-02,
                       -1.11389637e-02, -7.59505250e-03, 5.65141213e-03,
                       4.81559901e-03, -1.37724956e-02, -1.51201763e-02,
                       -2.55894748e-02, -2.48333169e-02, -2.56770574e-02,
                       -3.21192961e-02, -2.71028609e-02, -2.84357450e-02])

date_array = np.array(['"2016-05-03"', '"2016-05-04"', '"2016-05-05"', '"2016-05-06"',
                       '"2016-05-07"', '"2016-05-08"', '"2016-05-09"', '"2016-05-10"',
                       '"2016-05-11"', '"2016-05-12"', '"2016-05-13"', '"2016-05-14"',
                       '"2016-05-15"', '"2016-05-16"', '"2016-05-17"', '"2016-05-18"',
                       '"2016-05-19"', '"2016-05-20"', '"2016-05-21"', '"2016-05-22"',
                       '"2016-05-23"', '"2016-05-24"', '"2016-05-25"', '"2016-05-26"'])

data = np.vstack((date_array,item_array))

print data
我得到了一个好的结果:
[['"2016-05-03"' '"2016-05-04"' '"2016-05-05"' '"2016-05-06"'
  '"2016-05-07"' '"2016-05-08"' '"2016-05-09"' '"2016-05-10"'
  '"2016-05-11"' '"2016-05-12"' '"2016-05-13"' '"2016-05-14"'
  '"2016-05-15"' '"2016-05-16"' '"2016-05-17"' '"2016-05-18"'
  '"2016-05-19"' '"2016-05-20"' '"2016-05-21"' '"2016-05-22"'
  '"2016-05-23"' '"2016-05-24"' '"2016-05-25"' '"2016-05-26"']
 ['0.0' '-0.0018199251' '-0.00944964473' '-0.00312464669' '-0.00542864845'
  '-0.00167769866' '3.04871703e-05' '-0.00781295968' '-0.0112972557'
  '-0.0169797339' '-0.0122161657' '-0.0193931514' '-0.0111389637'
  '-0.0075950525' '0.00565141213' '0.00481559901' '-0.0137724956'
  '-0.0151201763' '-0.0255894748' '-0.0248333169' '-0.0256770574'
  '-0.0321192961' '-0.0271028609' '-0.028435745']]
如果您不写 dtype,它应该可以正常工作 ;)

1
我在你的代码中没有看到任何不同之处。你的date_array和堆栈的dtype是什么?OP展示了他的数组的repr,其中包括dtype(和逗号)。这里可能还有其他问题。 - hpaulj
我将item_array的类型从float改为string '|S32',然后它就可以工作了。非常感谢。 在[2]中:type(item_array [0]) Out[2]:numpy.float64 在[3]中:item_array = item_array.astype('|S32') 在[4]中:type(item_array [0]) Out[4]:numpy.string_ - Peter

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