Numpy:在左边的任何东西都是假的地方设置假

如何根据每个值左侧列中的值设置 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 的右侧。有没有办法在没有两个嵌套循环的情况下做到这一点?我正在寻找更好的方法,但很难知道我是否可以使用内置函数来做到这一点。


幕布斯6054654
浏览 182回答 3
3回答

拉莫斯之舞

在完美的工具存在: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]])

慕尼黑的夜晚无繁华

使用fornumpy 数组时尽量不要使用纯循环。改用cumulative product反对axis=1arr.cumprod(1).astype(np.bool)

慕勒3428872

>>> mc = (8, 4)>>> survival = np.random.random(mc) > np.random.random(mc)>>> survivalarray([[ 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]]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python