我刚刚改变了一个我正在编写的程序,将我的数据保存为numpy数组,因为我遇到了性能问题,而且差别很大.它最初运行需要30分钟,现在需要2.5秒!
我想知道它是如何做到的.我认为是因为它消除了对for循环的需要但超出了我的难度.
我觉得我不太了解overflowand的概念underflow。我问这个问题是为了澄清这一点。我需要在最基本的层面上理解它。让我们使用1字节的简化浮点表示-1位符号、3位指数和4位尾数:
0 000 0000
Run Code Online (Sandbox Code Playgroud)
我们可以存储的最大指数111_2=7减去K=2^2-1=3给出的偏差4,它是为Infinity和保留的NaN。max number 的指数是3,它110在偏移二进制之下。
所以最大数的位模式是:
0 110 1111 // positive
1 110 1111 // negative
Run Code Online (Sandbox Code Playgroud)
当指数为零时,该数字是次正规的并且具有隐式0而不是1。所以最小数的位模式是:
0 000 0001 // positive
1 000 0001 // negative
Run Code Online (Sandbox Code Playgroud)
我找到了单精度浮点的这些描述:
Negative numbers less than ?(2?2?23) × 2127 (negative overflow)
Negative numbers greater than ?2?149 (negative underflow)
Positive numbers less than …Run Code Online (Sandbox Code Playgroud) 我有大量的价值观:
[23.22, 50.44 .... 32.53]
Run Code Online (Sandbox Code Playgroud)
在我应该得到下一个值之后:
reduce(operator.mul, [Decimal(i) for i in list])
Run Code Online (Sandbox Code Playgroud)
打印值 - 4.248649022193430909459625077E+583此值太大但我有下一步操作:
value**1/len(list)
Run Code Online (Sandbox Code Playgroud)
如果列表非常大,我无法获得值 - 在这种情况下是否可以获得几何平均值?