python – 用另一个数组中的随机元素填充numpy数组
发布时间:2020-12-16 22:58:05 所属栏目:Python 来源:网络整理
导读:我不确定这是否可行但是这里有.假设我有一个数组: array1 = [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1] 现在我想创建一个numpy 1D数组,由5个元素组成,这些元素是从array1中随机抽取的,条件是sum等于1.例如,类似于numpy数组,看起来像[.2,0.2,0.1,0.1]. 目前我使用随
我不确定这是否可行但是这里有.假设我有一个数组:
array1 = [0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1] 现在我想创建一个numpy 1D数组,由5个元素组成,这些元素是从array1中随机抽取的,条件是sum等于1.例如,类似于numpy数组,看起来像[.2,0.2,0.1,0.1]. >目前我使用随机模块和选择函数,如下所示: 解决方法
如果你使用numpy 1.7.0你可以使用
numpy.random.choice :
>>> import numpy as np >>> array1 = np.array([0,1]) >>> np.random.choice(array1,5) array([ 0.,0.,0.3,1.,0.3]) >>> np.random.choice(array1,5,replace=False) array([ 0.6,0.8,0.4]) 要获得总和等于1的5个元素, >生成4个随机数. >>> import numpy as np >>> >>> def solve(arr,total,n): ... while True: ... xs = np.random.choice(arr,n-1) ... remain = total - xs.sum() ... if remain in arr: ... return np.append(xs,remain) ... >>> array1 = np.array([0,1]) >>> print solve(array1,1,5) [ 0.1 0.3 0.4 0.2 0. ] 另一个版本(假设给定的数组已排序): EPS = 0.0000001 def solve(arr,n): while True: xs = np.random.choice(arr,n-1) t = xs.sum() i = arr.searchsorted(total - t) if abs(t + arr[i] - total) < EPS: return np.append(xs,arr[i]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |