我正在使用Python进行图像处理。
我试图从图像中随机提取一些像素。
用Numpy制作随机面具是不可能的吗?
我现在想的是将10000行数组的1000个元素设为True,其他所有为False,是否可以实现这一点?
另外,如果不可能,还有其他方法可以制作随机面具吗?谢谢。
创建一个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个。
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]