numpy布尔数组中每列至少一个True值

问题描述 投票:0回答:1

假设我有一个非常大的2D布尔数组(为示例起见,我们取4行x 3列的尺寸):

toto = np.array([[True, True, False],
                [False, True, False],
                [True, False, False],
                [False, True, False]])

我想对toto进行转换,以使每列至少包含一个True值,而其他列保持不变。

编辑:规则就是这样:如果一列都是False,我想在随机行中引入True。

因此,在此示例中,第3列中的False之一应为True。

您将如何有效地做到这一点?

提前谢谢您

python numpy boolean-operations
1个回答
0
投票

您可以这样操作:

col_mask = ~np.any(toto, axis=0)
row_idx = np.random.randint(toto.shape[0], size=np.sum(col_mask))
toto[col_mask, row_idx]=True

col_mask是可变列的array([False, False, True])row_idx是由行的可变索引组成的数组。

© www.soinside.com 2019 - 2024. All rights reserved.