Arrays 如何使用随机数生成一个数组,其中一个条件重复n次?

Arrays 如何使用随机数生成一个数组,其中一个条件重复n次?,arrays,numpy,random,conditional-statements,Arrays,Numpy,Random,Conditional Statements,我有一个数组,我用0到1的随机浮点数填充它 x = np.random.random((20,20)) 稍后,我将提取数组(x[行][列])中大于0.2的项,如下所示: loc = np.argwhere(x > 0.2) 但是,我无法控制loc的大小。我必须有最多80个元素提供大于0.2的条件 maxnum = 80 len(loc) == maxnum 提供大于0.2的项的组合每次都应该不同,因为它应该是一个随机数组。 更具体地说,如果我制作一个数组: y = np.random

我有一个数组,我用0到1的随机浮点数填充它

x = np.random.random((20,20))
稍后,我将提取数组(x[行][列])中大于0.2的项,如下所示:

loc = np.argwhere(x > 0.2)
但是,我无法控制
loc
的大小。我必须有最多80个元素提供大于0.2的条件

maxnum = 80
len(loc) == maxnum
提供大于0.2的项的组合每次都应该不同,因为它应该是一个随机数组。 更具体地说,如果我制作一个数组:

y = np.random.random((4,4))
这将产生:

array([[ 0.90282391,  0.11295454,  0.22650744,  0.31376307],
       [ 0.44553798,  0.19264588,  0.8944689 ,  0.77730786],
       [ 0.17462983,  0.79806749,  0.02074193,  0.3545992 ],
       [ 0.60130149,  0.5982725 ,  0.20522246,  0.99080217]])
我只需要随机选择其中的3个就可以大于0.2。 因此,预期输出应如下所示:

array([[ **0.90282391**,  0.11295454,  0.12650744,  0.11376307],
       [ 0.14553798,  0.19264588,  0.1944689 ,  0.17730786],
       [ 0.17462983,  0.19806749,  0.02074193,  **0.3545992** ],
       [ 0.10130149,  **0.5982725** ,  0.10522246,  0.19080217]])
粗体字(大于0.2)的位置在每次跑步中都会改变

您知道如何实现该输出吗

import numpy as np
n = 20
threshold = 0.2
maxNum = 80
res = np.zeros([n, n])
perm = np.random.permutation(n ** 2)

res.flat[perm[:maxNum]] = np.random.uniform(size=maxNum, low=threshold, high=1)
res.flat[perm[maxNum:]] = np.random.uniform(size=n**2 - maxNum, low=0, high=threshold)
让我解释一下。我们创建一个形状为(n,n)的空数组
res
。我们的
maxNum
值正好高于
threshold
。 我们选择
maxNum
在0和n**2-1之间的不同索引(我使用
np.random.permutation
)。我们在
res
的平面视图中用0.2到1之间的统一值填充相应的值

我们用在0和0.2之间均匀绘制的值填充剩余的
res

因此:

In [59]: len(np.argwhere(res > threshold))
Out[59]: 80
这会有帮助的

l=np.random.random((20,20))
loc= np.argwhere(l>.2) if len(np.argwhere(l>.2))<=80 else np.argwhere(l>.2)[:80]
l=np.random.random((20,20))
loc=np.argwhere(l>0.2)如果len(np.argwhere(l>0.2)).2[:80]

如果数据丢失,则会出现异常情况

谢谢您的回答。但是,我不能有一个带有这些代码的数组?我想创建一个数组,其中80项大于0.2,其余项应小于0.2。使用此代码,我有两个不同的数组?不,您有一个数组
res
。我们只需两步填写。哦,我明白了,谢谢。在“res”中,现在的数字是一致的。然而,数字应该是合理的random@podedo我的错误我忘记了一个参数,这个参数改变了loc,而不是元素数小于0。2@podedo对不起,我没能真正理解你的问题:谢谢。但是,我在这里怎么定义“l”呢?我的坏@podedo。纠正它