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

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

在 Python 中對數組滾動求和

在 Python 中對數組滾動求和

郎朗坤 2021-07-06 13:16:29
我得到一個數組 X,我被要求返回另一個數組 Y,其中 y[t] = x[t] + x[t-1] 和 y[0] = 0,而不在 Python 中使用 for 循環。我能想到的是使用滾動總和,但我不確定這是否是最快的方法,因為我需要將 x 轉換為數據幀/系列才能滾動工作。有沒有更快的方法來做到這一點?謝謝!df = pd.DataFrame(X).rename(columns={0: 'X'})df['Y'] = df['X'].rolling(2).sum().fillna(0)Y = df['Y'].values
查看完整描述

3 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以使用列表理解和zip:


x = [1, 2, 3, 4]

y = [0] + [c + n for c, n in zip(x, x[1:])]

print(y)

輸出


[0, 3, 5, 7]

這種方式依賴于內置函數,因此無需導入pandas等外部模塊。


查看完整回答
反對 回復 2021-07-13
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

如果您正在尋找單線可能無法提供最佳性能


from toolz.itertoolz import sliding_window

[0]+map(sum,list(sliding_window(2, [1, 2, 3, 4]))) # [0, 3, 5, 7]


查看完整回答
反對 回復 2021-07-13
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

好吧,您可以使用numpy,盡管這仍然會將列表轉換為數組。

y = x + np.roll(x, 1)
y[0] = 0

這是快速、簡短、相當透明的,并且不(明確地)使用for循環。

您也可以使用map,這與列表推導式幾乎相同,并且不需要任何外部庫。

y = 0 + map(lambda (a, b): a+b, zip(x, x[1:]))

在 Python3 中這是行不通的,你需要這樣寫:

y = [0] + list(map(lambda a: a[0]+a[1], zip(x, x[1:])))

或者

y = [0] + list(map(sum, zip(x, x[1:])))


查看完整回答
反對 回復 2021-07-13
  • 3 回答
  • 0 關注
  • 644 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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