【问题标题】:Converting NumPy floats to ints without loss of precision将 NumPy 浮点数转换为整数而不损失精度
【发布时间】:2018-08-02 17:47:21
【问题描述】:

我正在使用 Python 中的 OpenCV 开发视觉算法。它的组成部分之一需要比较颜色空间中的点,其中 x 和 y 分量不是整数。我们的点列表存储为 dtype = float64 的 ndarray,我们的数字范围从 -10 到 10。

我们算法的一部分涉及在这个空间中的一些点上运行一个凸包,但是cv2.convexHull() 需要一个 dtype = int 的 ndarray。

鉴于我们要比较的值范围很窄,简单的截断会导致我们丢失大约 60 位信息。有没有办法让 numpy 直接将 float 数组解释为 int 数组?由于比例没有意义,我希望考虑所有 64 位。

是否有任何已定义的方法可以在 numpy 浮点数中将指数与尾数分开,而不对每个元素进行按位提取?

【问题讨论】:

  • 把你的float数组乘以1000,传入,输出除以1000?因此,如果您的号码是 12.123,请将 12123 作为整数传入。
  • 仅供参考:scipy.spatial.ConvexHull 接受浮点数组。
  • 浮点有 53 位有效位,而不是 64 - 其他位用于指数和符号。
  • P.S.我可以理解为什么 -10 到 10 的范围不够精确,但是对于色彩工作,你真的不需要那么高的精确度。乘以 100 可能会起作用。
  • 另一个仅供参考:“我希望考虑所有 64 位。” 通过谷歌搜索(我不是 OpenCV 专家),它看起来像最大的可用于 OpenCV 数组的整数类型是 32 位有符号的,因此尝试在所有 64(或 53)位中维护信息是没有意义的。

标签: python numpy opencv


【解决方案1】:

“我们算法的一部分涉及在这个空间中的一些点上运行一个凸包,但是 cv2.convexHull() 需要一个 dtype = int 的 ndarray。”

cv2.convexHull() 也接受带有 float32 数字的 numpy 数组。

尝试使用cv2.convexHull(numpy.array(a,dtype = 'float32')),其中 a 是维度为 n*2 的列表(n = 点数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2011-05-26
    • 2014-01-30
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多