第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么Python中的遞歸加法會產(chǎn)生負(fù)數(shù)?

為什么Python中的遞歸加法會產(chǎn)生負(fù)數(shù)?

SMILET 2023-07-11 16:28:43
我一直在研究Python中的一個函數(shù),該函數(shù)查找數(shù)組中從各自的索引到數(shù)組開頭的所有元素的總和。示例: 輸入:[2,14,17,36]輸出:[2, 14+2, 17+14+2, 36+17+14+2]這是代碼。import matplotlib.pyplot as pltimport numpy as nparr = []a = np.array([2, 0, 0, 4, 0, 1, 0, 4, 5, 5])def rolling_sum(x):? ? total = 0? ? values = []? ? for i,j in enumerate(x):? ? ? ? total = total+j?? ? ? ? values.append(total)? ? if total <= 2000000000:? ? ? ? arr.append(values)? ? ? ? return rolling_sum(values)? ? else:? ? ? ? return valuesrolling_sum(a)for i in arr:? ? plt.plot(i)檢查arr變量發(fā)現(xiàn)其中有負(fù)數(shù),甚至從圖表中也清楚地顯示出來。請問為什么會這樣呢?
查看完整描述

2 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗 獲得超5個贊

當(dāng)您執(zhí)行代碼時,請注意警告:


RuntimeWarning: overflow encountered in long_scalars

    total = total+j

這是因為numpy有時默認(rèn)為np.int32(取決于操作系統(tǒng)是 32/64 位并且安裝的 Python 解釋器是 32/64 位,顯然是其中較低的一個)。在這種情況下,大量數(shù)字會溢出,因此它們會換行為負(fù)數(shù)。


通過提供以下內(nèi)容可以輕松解決此問題dtype=np.int64:


a = np.array([2, 0, 0, 4, 0, 1, 0, 4, 5, 5], dtype=np.int64)

這可以通過添加以下內(nèi)容來確認(rèn):


from itertools import chain


print(len(list(filter(lambda n: n < 0, chain.from_iterable(arr)))))

這會展平arr并計算有多少個負(fù)數(shù)。使用原始代碼,輸出是


RuntimeWarning: overflow encountered in long_scalars

  total = total+j

5

添加后dtype=np.int64輸出是


0


查看完整回答
反對 回復(fù) 2023-07-11
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗 獲得超6個贊

NumPy 數(shù)組使用固定大小的整數(shù)類型(例如)?,這與大小不受限制的int64常規(guī) Python 類型不同。int

它們具有可以代表的最大值。嘗試添加大于此最大值的值會導(dǎo)致溢出,這可能會導(dǎo)致有符號整數(shù)類型出現(xiàn)負(fù)值。

例如,該類型的最大值int32為 2?31??1 = 2147483647,加 1 得到最小值 ?2?31?= ?2147483648。對于int64類型來說,這些值要大得多;分別為9223372036854775807和-9223372036854775808。根據(jù)您的實現(xiàn)(即 NumPy 默認(rèn)使用的類型)和您使用的輸入,您可能會或可能不會看到此行為。

就您而言,與 Python 列表相比,您似乎沒有使用 NumPy 數(shù)組提供的任何功能,因此您可以只使用a = [2, 0, 0, 4, 0, 1, 0, 4, 5, 5]并依賴 Python 為您處理無限的大整數(shù)。


查看完整回答
反對 回復(fù) 2023-07-11
  • 2 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號