我可以用Numpy制作随机面具吗?

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

我正在使用Python进行图像处理。

我试图从图像中随机提取一些像素。

用Numpy制作随机面具是不可能的吗?

我现在想的是将10000行数组的1000个元素设为True,其他所有为False,是否可以实现这一点?

另外,如果不可能,还有其他方法可以制作随机面具吗?谢谢。

python numpy random boolean
2个回答
11
投票

创建一个False值数组,将第一个1000元素设置为True

a = np.full(10000, False)
a[:1000] = True

然后简单地将阵列洗牌

np.random.shuffle(a)

对于稍微快一点的解决方案,您还可以创建一个整数零的数组,将一些值设置为1,随机播放并将其强制转换为bool

a = np.zeros(10000, dtype=int)
a[:1000] = 1
np.random.shuffle(a)
a = a.astype(bool)

在这两种情况下,你将有一个数组a,在随机位置正好有1000个True元素。

如果您想要从[True, False]中单独挑选每个元素,您可以使用

np.random.choice([True, False], size=10000, p=[0.1, 0.9])

但请注意,您无法预测数组中True元素的数量。你只知道你平均有1000个。


0
投票
In [7]: import numpy as np 

In [8]: mask=np.array( [False]*10000)

In [9]: inds=np.random.choice(np.arange(10000),size=1000)

In [10]: mask[inds]=True

现在你的面具的前100个元素是

In [11]: print(mask[:100])
[False False False False False  True False False False False False False
 False False False False False False False False False False  True False
 False False False False False False False  True  True False  True False
 False False False False False False False False False False  True False
 True False False False False False False False False False False False
 False False False False False False  True False False False False False
 False False  True False False False False False False False False False
 False False  True False False False False False False False False False
 False False False False]
© www.soinside.com 2019 - 2024. All rights reserved.