【问题标题】:Convert int64 to uint64将 int64 转换为 uint64
【发布时间】:2010-12-13 06:06:07
【问题描述】:

我想将一个 int64 numpy 数组转换为一个 uint64 numpy 数组,将 2**63 添加到过程中的值,以便它们仍然在数组允许的有效范围内。例如,如果我从

a = np.array([-2**63,2**63-1], dtype=np.int64)

我想结束

np.array([0.,2**64], dtype=np.uint64)

一开始听起来很简单,但你会怎么做呢?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    使用astype() 将值转换为另一种数据类型:

    import numpy as np
    (a+2**63).astype(np.uint64)
    # array([                   0, 18446744073709551615], dtype=uint64)
    

    【讨论】:

    • 怎么样? NameError:未定义名称“uint64”。除了numpy 你还需要什么?
    • @Hack-R: uint64 应该是 np.uint64,前提是 numpy 是使用 import numpy as np 导入的。感谢您指出这一点。
    【解决方案2】:

    我不是真正的 numpy 专家,但这是:

    >>> a = np.array([-2**63,2**63-1], dtype=np.int64)
    >>> b = np.array([x+2**63 for x in a], dtype=np.uint64)
    >>> b
    array([                   0, 18446744073709551615], dtype=uint64)
    

    适用于我的 Python 2.6 和 numpy 1.3.0

    我假设您在预期输出中指的是2**64-1,而不是2**64,因为2**64 不适合uint64。 (18446744073709551615 是2**64-1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多