Arrays 如何使用随机数生成一个数组,其中一个条件重复n次?
我有一个数组,我用0到1的随机浮点数填充它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
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。纠正它