【问题标题】:How can I convert 'np.inf' to an integer type?如何将“np.inf”转换为整数类型?
【发布时间】:2019-06-29 04:34:32
【问题描述】:

我想将np.inf的返回类型转换为int,默认返回float类型。

我已经尝试了以下,但都给出了错误。

int(np.inf)

溢出错误:无法将浮点无穷大转换为整数

(np.inf).astype(int64)

AttributeError: 'float' 对象没有属性 'astype'

【问题讨论】:

  • inf 和 nan 是浮点标准 IEEE 754 的一部分。整数类型通常无法表示这些特殊情况值,只能表示给定范围内的数值 (wikipedia source)。您将需要自行选择如何处理这些情况(例如将 nan 分配为 0,将 inf 分配给 -1 等)

标签: python numpy int


【解决方案1】:

不幸的是,cmets 建议没有,但如果你知道你想要的整数类型,你可以使用 np.iinfo 并选择最大值或最小值

np.iinfo(np.int32).max  # ---- 2147483647

np.iinfo(np.int32).min  # ---- -2147483648

np.iinfo(np.int64).max  # ---- 9223372036854775807

np.iinfo(np.int64).min  # ---- -9223372036854775808

【讨论】:

    【解决方案2】:

    浮点数有一个标准:“IEEE 754”(它不是特定于 python)。该标准为 +/-Infinity 和 NaN 保留了一些特殊的字节序列。 对于整数,此类特殊值不会保留,因此不可能有 int 无穷大。

    我做了一些实验:你可以做np.array([np.inf]).astype(int)[0] 这会给你-9223372036854775808 (-(2 ** 64)/2)。 np.array([np.nan]).astype(int)[0] 也产生相同的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2014-04-28
      • 1970-01-01
      相关资源
      最近更新 更多