将int64转换为uint64

时间:2009-11-05 00:35:30

标签: python numpy

我想将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)

起初听起来很简单,但你怎么做呢?

2 个答案:

答案 0 :(得分:3)

使用astype()将值转换为另一个dtype:

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

答案 1 :(得分:1)

我不是一个真正的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