Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数组求和,直到达到给定值为止。_Python_Python 2.7_Numpy_Random - Fatal编程技术网

Python 从数组求和,直到达到给定值为止。

Python 从数组求和,直到达到给定值为止。,python,python-2.7,numpy,random,Python,Python 2.7,Numpy,Random,我有几个带有值的numpy数组,如下所示: po_freq1 = [0.01408451 0.05633803 0.14084507 0.02816901 0.01408451 0.01408451 0.05633803 0.05633803 0.01408451 0.01408451 0.01408451 0.01408451 0.02816901 0.07042254 0.01408451 0.01408451 0.04225352 0.11267606 0.04225352 0.01408

我有几个带有值的numpy数组,如下所示:

po_freq1 = [0.01408451 0.05633803 0.14084507 0.02816901 0.01408451 0.01408451
0.05633803 0.05633803 0.01408451 0.01408451 0.01408451 0.01408451
0.02816901 0.07042254 0.01408451 0.01408451 0.04225352 0.11267606
0.04225352 0.01408451 0.04225352 0.02816901 0.01408451 0.04225352
0.05633803 0.01408451 0.01408451 0.01408451]

我的目标是从数组中随机选择一些值,并对这些值求和,直到达到给定值,例如0.90。有人有主意吗

您可以使用
cumsum
argmin
洗牌数组以使选择随机:

arr = np.array([0.87868619, 0.08184167, 0.01502171, 0.96840561, 0.31431041,
       0.531577  , 0.66069971, 0.1204876 , 0.9684556 , 0.81405872,
       0.48118081, 0.91681978, 0.15017044, 0.50540813, 0.11617046,
       0.01897202, 0.1894475 , 0.94660911, 0.46030856, 0.04641654])
np.random.shuffle(arr)
对于
5的阈值,例如:

>>> (np.cumsum(arr)<=5).argmin()
11

您可以使用
cumsum
argmin
洗牌数组以使选择随机:

arr = np.array([0.87868619, 0.08184167, 0.01502171, 0.96840561, 0.31431041,
       0.531577  , 0.66069971, 0.1204876 , 0.9684556 , 0.81405872,
       0.48118081, 0.91681978, 0.15017044, 0.50540813, 0.11617046,
       0.01897202, 0.1894475 , 0.94660911, 0.46030856, 0.04641654])
np.random.shuffle(arr)
对于
5的阈值,例如:

>>> (np.cumsum(arr)<=5).argmin()
11

使用随机包和while循环

import random
po_freq1 = [0.01408451, 0.05633803, 0.14084507, 0.02816901, 0.01408451, 0.01408451,
0.05633803, 0.05633803, 0.01408451, 0.01408451, 0.01408451, 0.01408451,
0.02816901, 0.07042254, 0.01408451, 0.01408451, 0.04225352, 0.11267606,
0.04225352, 0.01408451, 0.04225352, 0.02816901, 0.01408451, 0.04225352,
0.05633803, 0.01408451, 0.01408451, 0.01408451]

sumv = 0.
while sumv<0.9: sumv += random.choice(po_freq1)
print (sumv)
随机导入
po_freq1=[0.0140451,0.05633803,0.14084507,0.02816901,0.0140451,0.0140451,0.01408451,
0.05633803, 0.05633803, 0.01408451, 0.01408451, 0.01408451, 0.01408451,
0.02816901, 0.07042254, 0.01408451, 0.01408451, 0.04225352, 0.11267606,
0.04225352, 0.01408451, 0.04225352, 0.02816901, 0.01408451, 0.04225352,
0.05633803, 0.01408451, 0.01408451, 0.01408451]
sumv=0。

而sumv使用随机包和while循环

import random
po_freq1 = [0.01408451, 0.05633803, 0.14084507, 0.02816901, 0.01408451, 0.01408451,
0.05633803, 0.05633803, 0.01408451, 0.01408451, 0.01408451, 0.01408451,
0.02816901, 0.07042254, 0.01408451, 0.01408451, 0.04225352, 0.11267606,
0.04225352, 0.01408451, 0.04225352, 0.02816901, 0.01408451, 0.04225352,
0.05633803, 0.01408451, 0.01408451, 0.01408451]

sumv = 0.
while sumv<0.9: sumv += random.choice(po_freq1)
print (sumv)
随机导入
po_freq1=[0.0140451,0.05633803,0.14084507,0.02816901,0.0140451,0.0140451,0.01408451,
0.05633803, 0.05633803, 0.01408451, 0.01408451, 0.01408451, 0.01408451,
0.02816901, 0.07042254, 0.01408451, 0.01408451, 0.04225352, 0.11267606,
0.04225352, 0.01408451, 0.04225352, 0.02816901, 0.01408451, 0.04225352,
0.05633803, 0.01408451, 0.01408451, 0.01408451]
sumv=0。

使用一个简单的
while
循环可以完成任务。不要用迭代器或累加器之类的东西来过度思考。一种方法是:继续从数组中提取随机值,并将其添加到保存部分和的变量中,直到达到sentinel值。不管怎样,请告诉我们你已经尝试了什么。你已经尝试了什么?你说的“达到”是指“超过”?是否允许重复选择(除了列表中的重复项)?听起来这本身就是一项非常荒谬的任务。除了那次行动你还需要做什么吗?还记得你选了哪些元素吗?最小化与目标的差异?使用简单的
,而
循环应该可以完成这项工作。不要用迭代器或累加器之类的东西来过度思考。一种方法是:继续从数组中提取随机值,并将其添加到保存部分和的变量中,直到达到sentinel值。不管怎样,请告诉我们你已经尝试了什么。你已经尝试了什么?你说的“达到”是指“超过”?是否允许重复选择(除了列表中的重复项)?听起来这本身就是一项非常荒谬的任务。除了那次行动你还需要做什么吗?还记得你选了哪些元素吗?将与目标的差异降至最低?