【发布时间】: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)
一开始听起来很简单,但你会怎么做呢?
【问题讨论】:
我想将一个 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)
一开始听起来很简单,但你会怎么做呢?
【问题讨论】:
使用astype() 将值转换为另一种数据类型:
import numpy as np
(a+2**63).astype(np.uint64)
# array([ 0, 18446744073709551615], dtype=uint64)
【讨论】:
numpy 你还需要什么?
uint64 应该是 np.uint64,前提是 numpy 是使用 import numpy as np 导入的。感谢您指出这一点。
我不是真正的 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)
【讨论】: