根据移动条件在循环中创建数据



我正试图在for循环中创建一个数据列表,如果满足某些条件,则将该列表存储在列表中。我的代码是

R = 10
lam = 1
proc_length = 100
L = 1
#Empty list to store lists
exponential_procs_lists = []
for procs in range(0,R): 
#Draw exponential random variables
z_exponential = np.random.exponential(lam,proc_length)
#Sort values to increase
z_exponential.sort()
#Insert 0 at start of list
z_dat_r = np.insert(z_exponential,0,0)
sum = np.sum(np.diff(z_dat_r))
if sum < 5*L:
exponential_procs_lists.append(z_dat_r)

其将存储满足sum<5L条件。我的问题是,当每个列表的总和小于5L时,存储R列表的最佳方式是什么?列表可以是不同的长度,但它们必须满足增量之和小于5*L的条件。非常感谢您的帮助。

好的,根据你的评论,我认为你想生成一个指数_procs_list,其中每个子列表都有一个sum<5*L

好吧,我修改了你的代码,一旦总和超过5*L,就把子列表砍掉
编辑:查看答案历史,查看我对上述方法的最后一个答案。

仔细观察,注意您实际上并不需要离散差分数组。您正在查找差数组,将其求和,并检查总和是否<5L,如果是,则附加原始数组。但请注意:
如果您的数组是这样的:[0, 0.00760541, 0.22281415, 0.60476231]
它的差异数组将是[0.00760541 0.21520874 0.38194816]
如果将差数组的前x项相加,则得到原始数组的第x+1个元素。所以你只需要保留小于5L:的元素

import numpy as np
R = 10
lam = 1
proc_length = 5
L = 1
exponential_procs_lists = []
def chop(nums, target):
good_list = []
for num in nums:
if num >= target:
break
good_list.append(num)
return good_list
for procs in range(0,R):
z_exponential = np.random.exponential(lam,proc_length)
z_exponential.sort()
z_dat_r = np.insert(z_exponential,0,0)
good_list = chop(z_dat_r, 5*L)
exponential_procs_lists.append(good_list)

您也可以只进行二进制搜索(以提高时间复杂性(或使用过滤器lambda,这取决于您。

相关内容

  • 没有找到相关文章

最新更新