编号格式化和存储

时间:2014-08-08 11:23:15

标签: numpy

我有大号numpy数组,其数字为1.01594734e+09 我只是希望这些数据为整数,或者在1.01594734e+03的情况下舍入到小数点后5位 或类似的东西

1 个答案:

答案 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),那么浮点数就是处理它们的正确方法。