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

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

Numpy:在左邊的任何東西都是假的地方設置假

Numpy:在左邊的任何東西都是假的地方設置假

幕布斯6054654 2021-09-25 14:13:24
如何根據每個值左側列中的值設置 numpy 數組中的值...?我正在運行一些模擬來預測存活率,但下面是我正在嘗試做的核心。我預測了一堆離散的時間點生存,表示為 True 和 Falses。每行是一個模擬,每列是一個時間點(即 col 0 是第一個時間點,col 1 在其之后)mc = (8, 4)survival = np.random.random(mc) > np.random.random(mc)survival這會給我這樣的輸出。array([[False,  True,  True, False],       [True,  False,  True, False],       [ True, True,  True,  True], ...但如果某物在第一個時間點死亡,它就永遠死了。所以我的輸出需要是:array([[False,  False,  False, False],       [True,  False,  False, False],       [ True, True,  True,  True], ...因此,對于一行,我想將所有 False 設置在我找到的第一個 False 的右側。有沒有辦法在沒有兩個嵌套循環的情況下做到這一點?我正在尋找更好的方法,但很難知道我是否可以使用內置函數來做到這一點。
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

在完美的工具存在:


np.logical_and.accumulate(survival,axis=1)

例子 :


array([[False,  True, False,  True],

       [ True,  True, False,  True],

       [False,  True,  True,  True],

       [False,  True, False, False],

       [ True, False, False, False],

       [False,  True,  True,  True],

       [False, False,  True, False],

       [False, False,  True,  True]])


=>

array([[False, False, False, False],

       [ True,  True, False, False],

       [False, False, False, False],

       [False, False, False, False],

       [ True, False, False, False],

       [False, False, False, False],

       [False, False, False, False],

       [False, False, False, False]])


查看完整回答
反對 回復 2021-09-25
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

使用fornumpy 數組時盡量不要使用純循環。

改用cumulative product反對axis=1

arr.cumprod(1).astype(np.bool)


查看完整回答
反對 回復 2021-09-25
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

>>> mc = (8, 4)

>>> survival = np.random.random(mc) > np.random.random(mc)

>>> survival

array([[ True,  True,  True,  True],

       [ True, False, False,  True],

       [ True, False,  True,  True],

       [ True, False,  True, False],

       [False,  True, False, False],

       [ True,  True, False,  True],

       [ True,  True, False, False],

       [False, False,  True,  True]])


>>> death = [x.tolist().index(False) if False in x else -1 for x in survival]

>>> [s[ : d].tolist() + [False] * (survival.shape[1] - d) if d != -1 else s.tolist() for s, d in zip(survival, death)]

[[True, True, True, True],

 [True, False, False, False],

 [True, False, False, False],

 [True, False, False, False],

 [False, False, False, False],

 [True, True, False, False],

 [True, True, False, False],

 [False, False, False, False]]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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