我能用纽比做随机面具吗

2024-05-16 04:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python做图像处理。在

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

不可能用纽比做随机面具吗

我现在想的是使10000行数组中的1000个元素为真,其他的都为假,有没有可能实现这一点?在

另外,如果不可能的话,有没有其他方法可以制作一个随机的面具? 谢谢您。在


Tags: 方法图像元素像素数组图像处理面具
3条回答

与Nils Werner的回答相似,但更直接:

import numpy as np

size = 10000
num_true = 1000
^{pr2}$

同样快;使用IPython的%%timeit魔术:

%%timeit
a = np.zeros(size, dtype=int)
a[:num_ones] = 1
np.random.shuffle(a)
a = a.astype(bool)

输出:217 µs ± 2.33 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
mask = np.concat([np.ones(num_true, dtype=bool), np.zeros(size - num_true, dtype=bool)])
np.random.shuffle(mask)

输出:201 µs ± 1.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

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个元素是

^{pr2}$

{{{cd2>要创建第一个

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

然后简单地洗牌

^{pr2}$

为了获得更快的解决方案,您还可以创建一个整数零数组,将一些值设置为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个。在

相关问题 更多 >