2008-09-12 4 views
1

Я пишу программу для моделирования реальных компаний данных опроса, как Gallup или Расмуссена публиковать ежедневно: www.gallup.com и www.rassmussenreports.comСохранение нескольких массивов в Python

Я использую метод грубой силы , где компьютер генерирует некоторые случайные ежедневные данные опроса, а затем вычисляет средние значения за 3 дня, чтобы узнать, соответствует ли среднее число случайных данных числу опрошенных. (Большинство номеров опросов компаний - это трехдневные средние значения)

В настоящее время он хорошо работает для одной итерации, но моя цель состоит в том, чтобы он производил наиболее распространенное симуляцию, которая соответствует средним данным опроса. Затем я мог бы изменить код в любом месте от 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 вары?

ответ

2

Будет что-то вроде этой работы?

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

Вы говорите об этом?

>>> a = [ ['a', 'b'], ['c', 'd'] ] 
>>> a[1] 
['c', 'd'] 
>>> a[1][1] 
'd' 
+0

Значит, это всего лишь массив массивов? Заставляет меня чувствовать себя глупо. – andy 2008-09-12 18:43:03

+0

Не чувствуйте себя глупо. Python - Python;) – 2008-09-12 21:13:04

1

Списки в питоне могут содержать любой тип объекта - Если я правильно понял вопрос правильно, будет list из list с сделать работу? Что-то вроде этого (если у вас есть функция generate_poll_data(), которая создает свои данные:.

data = [] 

for in xrange(num_iterations): 
    data.append(generate_poll_data()) 

Тогда data[n] будет список данных из (n-1) го пробега

+0

s/nth/(n + 1) th/run. Запуски подсчитываются от 1 (первый запуск, второй запуск и т. Д.). – jfs 2008-09-12 18:19:03

1

, так как вы думаете, в переменных, вы можете предпочесть словарь по списку списков:

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

т.д.

+0

Мышление в переменных? О чем еще я мог бы думать? Некоторые фоне. Я знаю немного PASCAL и использую это как проект для изучения Python. – andy 2008-09-12 18:41:36

1

Я бы очень хотел использовать NumPy для этого. Вы получаете эффективные N-мерные массивы, которые вы можете быстро и легко обрабатывать.

Смежные вопросы