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
这是一个错误还是我错过了什么?
答案 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的长对象。
我们需要阅读源代码以了解详细信息。