左移不一致

2024-06-14 08:06:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我昨天问了一个很漂亮的问题

在这篇文章中,他使用了:

df = pd.DataFrame([[1, 0, 1], [1, 1, 0], [0, 1, 1], [0, 0, 1]])

print (df.T.dot(1 << np.arange(df.shape[0] - 1, -1, -1)))

0    12
1     6
2    11
dtype: int64

1 << np.arange(df.shape[0])df.shape[0]小于30的情况下效果很好,但在那之后就爆炸了。考虑到int32或int64的数据类型,这也是可以理解的。会有限制的。但是,当我用int操作数执行左移<<时,它返回long并保持精度。如何使用numpy获得与使用1 << 60时相同的结果?你知道吗

以下是我运行的内容:

import numpy as np



for n in range(0, 61, 10):
    a = np.arange(n + 1, dtype=int)

    pstr = "for n = {:<5d}; 1 << a[-1] = {:<12d}; 1 << n = {:<12d}" 
    print pstr.format(n, 1 << a[-1], 1 << n)

for n = 0    ; 1 << a[-1] = 1           ; 1 << n = 1           
for n = 10   ; 1 << a[-1] = 1024        ; 1 << n = 1024        
for n = 20   ; 1 << a[-1] = 1048576     ; 1 << n = 1048576     
for n = 30   ; 1 << a[-1] = 1073741824  ; 1 << n = 1073741824  
for n = 40   ; 1 << a[-1] = 256         ; 1 << n = 1099511627776
for n = 50   ; 1 << a[-1] = 262144      ; 1 << n = 1125899906842624
for n = 60   ; 1 << a[-1] = 268435456   ; 1 << n = 1152921504606846976

Tags: numpydataframedffornpintpdprint