上面【例2】中提到的dtype范例不对,数据运算时大概引发盘算结果堕落,是由于定义一个array对象时如果不指定命据范例,会根据元素值的巨细(字节数)自动默认一种数据范例, 且求和的值服从该数据范例。
如果某个array数组中存在的值相称多,和值的上限超出该数据范例的上限时,盘算结果每每会堕落。
ali1 = numpy.array([1,3,5,7])ali2 = numpy.array([i for i in range(10000000)])ali3 = numpy.array([0.3,1.00,0.0079])print(f'ali1数据范例:{ali1.dtype}\nali2数据范例:{ali2.dtype}\nali3数据范例:{ali3.dtype}')print(f'ali2未指定命据范例,直接求和的结果为:{ali2.sum()},和的数据范例:{type(ali2.sum())}')# 运算结果:ali1数据范例:int32ali2数据范例:int32ali3数据范例:float64ali2未指定命据范例,直接求和的结果为:-2014260032,和的数据范例:<class 'numpy.int32'>办理办法就是定义对象或举行求和利用时,定义一个更为符合的数字范例。
# 定义对象时指定命据范例ali2 = numpy.array([i for i in range(1000000)], dtype=numpy.int64)# 或,求和时制定命据范例ali3 = numpy.array([i for i in range(1000000)])res3 = ali3.sum(dtype=numpy.int64)print(f'ali2求和的结果为:{ali2.sum()},和的数据范例:{ali2.sum().dtype}')print(f'ali3求和的结果为:{res3},和的数据范例:{res3.dtype}')# 运行结果:ali2求和的结果为:499999500000,和的数据范例:int64ali3求和的结果为:499999500000,和的数据范例:int64对numpy的熟悉到这里就差不多了,将来会进一步学习numpy的常用利用。
附:numpy数据范例: