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

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

使用新值填充到用零填充的固定形狀的 numpy 數組中

使用新值填充到用零填充的固定形狀的 numpy 數組中

慕森王 2022-08-02 17:35:45
假設數組是連續存儲的,如果我們嘗試或向它存儲,那么這不是就地發生的,而是創建數組的新副本,并為或連續發生創建足夠的“空間”(參見 https://stackoverflow.com/a/13215559/3286832)。numpyappendextendappendextend為了避免這種情況,并假設我們足夠幸運地知道我們期望數組具有的特定元素數量,我們可以創建一個具有固定大小的數組,其中填充了零:numpyimport numpy as npa = np.zeros(shape=(100,))  # [0. 0. 0. ... 0. 0. 0.]假設我們希望通過就地編輯此數組,每次(例如,由用戶提供)用新值填充每個元素的數組:pos = 0a[pos] = 0.002              # [0.002 0. 0. ... 0. 0. 0.]pos = pos + 1a[pos] = 0.101              # [0.002 0.101 0. ... 0. 0. 0.]# etc.pos = -1a[pos] = 42.00              # [0.002 0.101 ... ... ... 42.]問題:有沒有辦法跟蹤下一個可用位置(即以前未用新輸入值填充的最后一個位置),而不是每次都手動遞增?pospos有沒有辦法有效地實現這一點,最好是?或者有沒有一種方法可以在另一個Python庫中實現這一點(例如 或 )?numpyscipyPandas(根據評論和初步答案編輯了問題,這些答案說明了我最初的問題措辭多么不清楚 - 希望現在更清楚)
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

實際上,您的問題仍然讓我感到困惑。如何定義要插入到新位置的新值?它是否來自您的代碼外部?您的數組是否具有所有新值,還是只有數組的一部分?


也許,您可以使用 中的切片,這些切片正好用于數組的快速更新,但是,我并不完全確定這是您想要做的。numpy


為您提供一些示例:


>>> import numpy as np

>>> a = np.zeros(shape=(10,))

>>> a

array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

>>> a[3:6] += 1

>>> a

array([0., 0., 0., 1., 1., 1., 0., 0., 0., 0.])

>>> a[:4] += .001

>>> a

array([1.000e-03, 1.000e-03, 1.000e-03, 1.001e+00, 1.000e+00, 1.000e+00,

       0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00])

>>> a[3:5] = [2, 1]

>>> a

array([1.e-03, 1.e-03, 1.e-03, 2.e+00, 1.e+00, 1.e+00, 0.e+00, 0.e+00,

       0.e+00, 0.e+00])

>>>


查看完整回答
反對 回復 2022-08-02
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

如果我對你的理解是正確的,你需要某種循環緩沖區。Python有collections.deque用于此目的。

這是我使用 循環緩沖區的自定義實現,但您可以將其更改為 。h5pynumpy

更新:正如評論中已經提到的那樣,不可能跟蹤開箱即用的更改。相反,您可以實現自己的類并跟蹤所有必要的更改(請參閱我的實現作為示例,即連接數組以擴展其大?。?。我建議你使用python,如果你需要追加,或者你需要固定的大小。然后可以將這兩個數組轉換為np.arraylistdequenp.array


查看完整回答
反對 回復 2022-08-02
  • 2 回答
  • 0 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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