我有大号numpy数组,其数字为1.01594734e+09
我只是希望这些数据为整数,或者在1.01594734e+03
的情况下舍入到小数点后5位
或类似的东西
答案 0 :(得分:1)
您需要选择自己想要的内容。我假设你想让数组更小。
如果要将数组a
转换为整数,则:
a_int = a.astype('int')
但是,请记住,这不会节省任何存储空间,因为int
是一个8个八位位组(64位)的整数,而float
是一个8个八位位组的浮点数。
如果您知道您的整数数据大小有限,您可以指定存储格式更短:
a_int = a.astype('int32')
如果您有适合目标类型的纯整数数据,则此转换不会损失精度。
另一方面 - 根据您的数据 - 使用4个八位位组(32位)浮点数可能会获得同样好的结果:
a_shortfloat = a.astype('float32')
此转换会导致一些精度损失,具体取决于数据。
你建议的第二个选择是将一个数字舍入到给定的小数位数,有两种截然不同的可能性。
简单舍入到5位小数:
a_rounded = a.round(decimals=5)
然而,这并没有节省任何存储空间,数字只是舍入的(由于浮点表示的限制,它们甚至在之后也不准确)。
另一种可能性是使用固定点表示法:
a_fixedpoint = (a * 100000 + .5).astype('int32')
使用此表示形式,您的示例编号1.01594734e+03
将变为101 594 734.这是否有用是否取决于应用程序。有时定点数非常有用,但如果你的数字具有宽动态范围(例如从1e-5到1e5),那么浮点数就是处理它们的正确方法。