【发布时间】:2016-06-07 03:53:18
【问题描述】:
我昨天问了一个很好的问题answered by @jezrael
在这个他使用:
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]) 适用于小于 30 的 df.shape[0],但在那之后就崩溃了。考虑到 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
【问题讨论】:
-
int32 不能大于 2147483647,那么您希望
1<<60是什么? -
@Daniel 当我运行
1 << 60时,我得到1152921504606846976很长。 -
但是这个值对于 int32 来说太大了。那么您期望的 int32 值是多少?
-
我不希望有一个 int32。我很清楚 numpy 正在提供一个 int32 或 int64 数组。我想要一个长数组。