fragte ich eine Frage gestern, die schön answered by @jezraelLinksverschiebung Inkonsistenz
Dabei war er verwendet:
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
Die 1 << np.arange(df.shape[0])
für df.shape[0]
große Werke von weniger als 30, aber bläst danach auf. Dies ist auch unter Berücksichtigung eines Datentyps von int32 oder int64 verständlich. Es wird eine Grenze geben. Wenn ich jedoch nur eine <<
int
Operand Linksverschiebung ausführen, gibt es long
zurück und behält die Genauigkeit bei. Wie erhalte ich numpy, um das gleiche Ergebnis wie bei der Verwendung von 1 << 60
zu erhalten?
Hier ist, was ich lief:
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 kann nicht als 2147483647 größer sein, so was Sie tun erwarte '1 << 60' zu sein? – Daniel
@Daniel wenn ich '1 << 60 'renne bekomme ich' 1152921504606846976' als lang. – piRSquared
, aber dieser Wert ist zu groß für ein int32. Was ist der int32-Wert, den Sie erwarten? – Daniel