代码之家  ›  专栏  ›  技术社区  ›  alchemical

在Python中存储多个数组

  •  3
  • alchemical  · 技术社区  · 16 年前

    我使用的是蛮力法,计算机生成一些随机的每日投票数据,然后计算三天的平均值,看看随机数据的平均值是否与民意调查者的数字相符。(大多数公司的调查数据是三天平均值)

    目前,它在一次迭代中运行良好,但我的目标是让它生成与平均轮询数据匹配的最常见的模拟。然后我可以在任何地方更改代码,从1到1000次迭代。

    这就是我的问题。在测试结束时,我在单个变量中有一个数组,看起来像这样:

    [40.1, 39.4, 56.7, 60.0, 20.0 ..... 19.0]
    

    该程序当前为每个正确的模拟生成一个阵列。 我可以将每个数组存储在一个变量中,但我必须有一个程序,根据我请求的迭代次数生成1到1000个变量!?

    我如何避免这种情况?我知道有一种智能方法可以做到这一点,它不需要程序根据我想要的模拟数量生成变量来存储数组。

    麦凯恩的代码测试:

     test = [] 
    
    while x < 5: 
    
       test = round(100*random.random())
    
       mctest.append(test) 
    
       x = x +1 
    
    
    mctestavg = (mctest[0] + mctest[1] + mctest[2])/3 
    
    #mcavg is real data
    
    if mctestavg == mcavg[2]: 
      mcwork = mctest 
    

    如何在不创建多个mcwork变量的情况下重复?

    6 回复  |  直到 11 年前
        1
  •  3
  •   dF.    16 年前

    你喜欢这个工作吗?

    from random import randint    
    
    mcworks = []
    
    for n in xrange(NUM_ITERATIONS):
        mctest = [randint(0, 100) for i in xrange(5)]
        if sum(mctest[:3])/3 == mcavg[2]:
            mcworks.append(mctest) # mcavg is real data
    

    mctest 名单。

    我改变的是:

    • 使用 list comprehension
    • random.randint 获取随机整数
    • slices sum 计算前三项的平均值
    • (回答您的实际问题:-)将结果列在列表中 mcworks ,而不是为每次迭代创建新变量
        2
  •  3
  •   Nick Stinemates    16 年前

    你是说要这么做吗?

    >>> a = [ ['a', 'b'], ['c', 'd'] ]
    >>> a[1]
    ['c', 'd']
    >>> a[1][1]
    'd'
    
        3
  •  1
  •   dF.    16 年前

    list 属于 列表 谁来做这项工作?类似这样的东西(假设你有一个函数 generate_poll_data() 这将创建您的数据:

    data = []
    
    for in xrange(num_iterations):
        data.append(generate_poll_data())
    

    然后 data[n] 将是来自 (n-1) 第四轮。

        4
  •  1
  •   Daren Thomas    16 年前

    变量 ,您可能更喜欢字典而不是列表:

    data = {}
    data['a'] = [generate_poll_data()]
    data['b'] = [generate_poll_data()]
    

        5
  •  1
  •   Vinay    16 年前

    我强烈考虑使用 NumPy 这样做。您可以得到高效的N维数组,可以快速轻松地处理这些数组。

        6
  •  0
  •   Mattias    6 年前

    一个简洁的方法是将一系列的清单与熊猫结合使用。然后您就可以创建3天滚动平均值。

    rand_vals = [randint(0, 100) for i in range(5))]
    df = pd.DataFrame(data=rand_vals, columns=['generated data'])
    df['3 day avg'] = df['generated data'].rolling(3).mean()
    df['mcavg'] = mcavg # the list of real data
    # Extract the resulting list of values
    res = df.loc[df['3 day avg'] == df['mcavg']]['3 day avg'].values