Numpy:设置false,左边的任何内容都是false

Dav*_*vid 3 python numpy python-3.x

TLDR; 如何根据每个值左侧列中的值在numpy数组中设置值?

我正在运行一些模拟,我在预测存活率,但下面是我正在尝试做的核心.我预测一堆离散的时间点幸存者,表示为True和Falses.每行都是模拟,每列都是一个时间点(即col 0是第一个时间点,col 1是后续的)

mc = (8, 4)
survival = np.random.random(mc) > np.random.random(mc)
survival
Run Code Online (Sandbox Code Playgroud)

这将给我这样的输出.

array([[False,  True,  True, False],
       [True,  False,  True, False],
       [ True, True,  True,  True], ...
Run Code Online (Sandbox Code Playgroud)

但如果事情在第一时间点死亡,它就会永远死去.所以我的输出需要是:

array([[False,  False,  False, False],
       [True,  False,  False, False],
       [ True, True,  True,  True], ...
Run Code Online (Sandbox Code Playgroud)

所以对于一行,我想在我找到的第一个False的右边设置False.有没有办法在没有两个嵌套循环的情况下做到这一点?我正在寻找一种更好的方法,但很难知道我是否可以使用内置函数来做到这一点.

B. *_* M. 6

完美的工具存在:

np.logical_and.accumulate(survival,axis=1)
Run Code Online (Sandbox Code Playgroud)

示例:

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]])
Run Code Online (Sandbox Code Playgroud)