假设我有一个非常大的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。
您将如何有效地做到这一点?
提前谢谢您
您可以这样操作:
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
是由行的可变索引组成的数组。