Python 如何迭代每个'numpy.float16`

Python 如何迭代每个'numpy.float16`,python,numpy,Python,Numpy,对于某个任务,我有太多对复杂函数的重复调用,将其称为f(x),其中x是float。我没有非常大的浮点,也不需要太多的精度,所以我想为什么不使用f(x)的查找表,其中x是浮点16,查找表的最大大小是(2**16)。我计划使用np.float16制作一个小型python演示。我有点被困在如何迭代所有浮动的范围内。在C/C++中,我会使用uint16\u t,不断递增它。如何使用python创建此表?您可以使用arange生成所有可能的值,然后使用view将这些值重新解释为float16值。以下是一个

对于某个任务,我有太多对复杂函数的重复调用,将其称为
f(x)
,其中
x
是float。我没有非常大的浮点,也不需要太多的精度,所以我想为什么不使用f(x)的查找表,其中x是浮点16,查找表的最大大小是(2**16)。我计划使用
np.float16
制作一个小型python演示。我有点被困在如何迭代所有浮动的范围内。在
C/C++
中,我会使用
uint16\u t
,不断递增它。如何使用python创建此表?

您可以使用
arange
生成所有可能的值,然后使用
view
将这些值重新解释为
float16
值。以下是一个例子:

np.arange(65536,dtype=np.uint16).view(np.float16)

这将为您提供所有可能的
float16
值。请注意,许多是NaN值。

好的。我相信NaN值将是指数为11111和00000的值?另外,当我有一个float
x
时,我如何在这个表中得到相应的索引?指数是11111,而不是00000(不管符号是什么)。你可以找到更多关于这方面的信息。要找到浮动,并不容易。一种解决方案是对表格进行排序并进行二分法。另一个更快的解决方案是将浮点转换为
np.float16
,然后将其视为
np.uint16
,最终将其用作索引(
O(1)
)。是否需要预计算所有返回值,即代码是否至少两次将每个值传递给复杂函数?如果不是,记忆可能是一个更有效的解决方案。如果是这种情况,请查看
functools.lru\u cache
。@MichaelRuth,是的,我需要预先计算每个浮点值。LRU或任何缓存策略都不是一个好主意,因为任何
x
都可能被调用,而不是以任何顺序调用。我想要像
constexpr
查找表这样的东西。