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

HAL*_*HAL 1 python random boolean numpy

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

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

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

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

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

Nil*_*ner 11

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

a = np.full(10000, False)
a[:1000] = True
Run Code Online (Sandbox Code Playgroud)

然后简单地将阵列洗牌

np.random.shuffle(a)
Run Code Online (Sandbox Code Playgroud)

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

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

在这两种情况下,您将拥有一个阵列,a其中包含1000个True随机位置的元素.

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

np.random.choice([True, False], size=10000, p=[0.1, 0.9])
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*hke 1

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
Run Code Online (Sandbox Code Playgroud)

现在你的掩码的前 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]
Run Code Online (Sandbox Code Playgroud)