我有一个numpy数组,如下所示。
data = np.array([True, True, True, True, False, True, True, False, True, True, False])从'True‘的位置,我必须随机采样3个位置,并保持它们为True,除了它们,转换为False。
我试着这样做:
indx = np.random.choice(len(data),3,replace=False)
data[~indx] = False如何做得更好(1.简单,2.性能,3.优雅)?
print (data)另外,如何仅从'True`‘位置采样?我的代码是从所有位置执行的,并且不正确。
发布于 2020-01-04 02:30:10
为了优雅,这里有一个-
n = 3
idx = np.flatnonzero(data)
r = np.random.choice(idx, n, replace=False)
data[idx[~np.isin(idx,r)]] = False为了提高性能-
s = data.sum()
t_mask = np.zeros(s, dtype=bool)
t_mask[np.random.choice(s, n, replace=False)] = True
data[data] = t_maskhttps://stackoverflow.com/questions/59583515
复制相似问题