亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數組中執行按位左移操作時超出整數限制

在數組中執行按位左移操作時超出整數限制

HUWWW 2021-06-04 18:30:21
我正在使用按位左移運算符創建一個 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'>


查看完整回答
反對 回復 2021-06-16
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號