numpy按位运算错误

时间:2014-11-05 10:49:42

标签: python numpy

numpy version 1.9.0

1 & (2**63)
0

np.bitwise_and(1, 2**63)
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

np.bitwise_and(1, 2**63 + 100)
TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

np.bitwise_and(1, 2**64)
0

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:6)

首先转换为uint64

np.bitwise_and(np.uint64(1), np.uint64(2**63))

以下是检查将python整数转换为numpy整数的规则的代码:

print np.array([2**30]).dtype
print np.array([2**31]).dtype
print np.array([2**63]).dtype
print np.array([2**64]).dtype

输出:

int32
int64
uint64
object

我认为np.bitwise_and(1, 2**63)会引发错误,因为2**63超出了int32和int64的范围。

np.bitwise_and(1, 2**64)有效,因为它将使用Python的长对象。

我们需要阅读源代码以了解详细信息。