2024-05-16 04:54:37 发布
网友
我用Python做图像处理。在
我试图从图像中随机提取一些像素。在
不可能用纽比做随机面具吗
我现在想的是使10000行数组中的1000个元素为真,其他的都为假,有没有可能实现这一点?在
另外,如果不可能的话,有没有其他方法可以制作一个随机的面具? 谢谢您。在
与Nils Werner的回答相似,但更直接:
import numpy as np size = 10000 num_true = 1000
同样快;使用IPython的%%timeit魔术:
%%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)
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)
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个元素是
{{{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个。在
a = np.full(10000, False) a[:1000] = True
然后简单地洗牌
为了获得更快的解决方案,您还可以创建一个整数零数组,将一些值设置为1,然后将其转换为bool:
1
bool
a = np.zeros(10000, dtype=int) a[:1000] = 1 np.random.shuffle(a) a = a.astype(bool)
在这两种情况下,您将有一个数组a,其中正好有1000个True元素,位于随机位置。在
a
True
如果您希望每个元素分别从[True, False]中选取,则可以使用
[True, False]
np.random.choice([True, False], size=10000, p=[0.1, 0.9])
但是请注意,您无法预测数组中True元素的数量。你就会知道,平均下来你会有1000个。在
与Nils Werner的回答相似,但更直接:
^{pr2}$同样快;使用IPython的
%%timeit
魔术:输出:
217 µs ± 2.33 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
输出:
201 µs ± 1.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
现在你的面具的前100个元素是
^{pr2}${{{cd2>要创建第一个
然后简单地洗牌
^{pr2}$为了获得更快的解决方案,您还可以创建一个整数零数组,将一些值设置为
1
,然后将其转换为bool
:在这两种情况下,您将有一个数组
a
,其中正好有1000个True
元素,位于随机位置。在如果您希望每个元素分别从
[True, False]
中选取,则可以使用但是请注意,您无法预测数组中
True
元素的数量。你就会知道,平均下来你会有1000个。在相关问题 更多 >
编程相关推荐