0

我必须使用一种算法,它需要一个整数矩阵作为输入。我拥有的输入是真正有价值的,因此我想在将输入传递给算法之前将其转换为整数。

我虽然将输入缩放一个大常数,然后将其四舍五入为整数。这看起来是一个很好的解决方案,但是如何决定使用一个好的常量,特别是因为浮点输入的范围可能因情况而异?也欢迎任何其他想法?

4

2 回答 2

2

这个问题的最佳一般答案可能是找出您的算法可以接受的最大整数值作为矩阵中的一个元素,而不会导致算法本身溢出。一旦你有了这个最大值,在你的输入数据中找到最大的浮点值,然后按这两个最大值的比率缩放你的输入,然后四舍五入到最接近的整数(避免截断)。

实际上,您可能无法做到这一点,因为您可能无法确定算法可以接受而不会溢出的最大整数值是多少。也许你不知道算法的细节,或者它以一种复杂的方式依赖于所有的输入值。如果是这种情况,您只需要选择一个似乎工作得很好的任意最大输入值。

于 2012-09-13T14:02:05.920 回答
0

首先将您的输入标准化为 [0,1) 范围,然后使用常用方法对其进行缩放:

f(x) = range_max_exclusive * x + range_min_inclusive

之后,将 f(x) (或根据需要舍入)转换为整数。通过这种方式,您可以处理诸如实际值在范围内[0,1)[0,n) where n>1.

通常,您最喜欢的库包含矩阵运算,您可以轻松实现此技术,并且比您可能的实现具有更好的性能。

编辑:按比例缩小然后按比例放大肯定会丢失一些精度。我喜欢它,因为标准化操作通常随库一起提供。您也可以通过以下方式在不缩小规模的情况下做到这一点:

f(x) = range_max_exlusive / max_element * x + range_min_inclusive
于 2012-09-13T12:26:17.877 回答