我正在使用按位左移運算符創建一個 numpy 數組。例如,我創建了數組 p,其中數組的形狀與矩陣 a 的形狀相同,即 (23,):>>> import numpy>>> a = numpy.array([0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1,1])>>> p = 1 << arange(a.shape[-1] - 1) #left shift 結果正如預期的那樣:>>> parray([ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152])但是,如果我們增加數組的大小,讓我們說 (70,):>>> parray([ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488,在頂部,您可以看到,當它從 1,2,4,8 增加時,..... 變為負數,然后變為 0,最終變為 16。如果我單獨進行,則情況并非如此:>>> 1<<701180591620717411303424那么,我該怎么做才能使數組的元素具有對應于 的值1<<x,其中 x 是一個大數字(大于 70)?
1 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
Python int 和 numpy int 不一樣... Python 支持任意長度,而 numpy 由類型固定:
numpy.array([1]) << 70
>>> array([64], dtype=int32)
一種解決方案是使用對象數據類型:
numpy.array([1], dtype=numpy.object) << 70
>>> array([1180591620717411303424], dtype=object)
以下將按預期工作:
a = numpy.array([1], dtype=numpy.object) << numpy.arange(70)
查看最后一個元素的類型,我們看到它是一個 Python int:
type(a[-1])
>>> <class 'int'>
添加回答
舉報
0/150
提交
取消