我想将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)
起初听起来很简单,但你怎么做呢?
答案 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
)