Вот более эффективный способ сделать это:
Просто вызовите следующую функцию с массивом 'weightights' (при условии, что индексы соответствуют соответствующим элементам) и no. необходимых образцов. Эта функция может быть легко модифицирована для обработки упорядоченной пары.
Возвращает индексы (или элементы), отобранные / выбранные (с заменой) с использованием их соответствующих вероятностей:
def resample(weights, n):
beta = 0
# Caveat: Assign max weight to max*2 for best results
max_w = max(weights)*2
# Pick an item uniformly at random, to start with
current_item = random.randint(0,n-1)
result = []
for i in range(n):
beta += random.uniform(0,max_w)
while weights[current_item] < beta:
beta -= weights[current_item]
current_item = (current_item + 1) % n # cyclic
else:
result.append(current_item)
return result
Краткая заметка о концепции, используемой в цикле while. Мы уменьшаем вес текущего элемента от кумулятивной бета-версии, которая является совокупным значением, построенным равномерно случайным образом, и увеличиваем текущий индекс, чтобы найти элемент, вес которого соответствует значению бета-версии.
Я обнаружил TDD пару лет назад и с тех пор написал все свои любимые проекты, используя его.
Я работаю инженером по обслуживанию плохо документированной, ужасной и большой кодовой базы. Я бы хотел, чтобы люди, написавшие код, написали для него модульные тесты.
Каждый раз, когда я вношу изменения и обновляю производственный код, я боюсь, что могу внести ошибку из-за того, что не учел какое-то условие.
Если бы они написали тест, внесение изменений в базу кода было бы проще и быстрее. (В то же время база кода была бы в лучшем состоянии) ..
Я думаю, что модульные тесты очень полезны при написании API или фреймворков. которые должны прослужить много лет и использоваться / модифицироваться / развиваться людьми, отличными от исходных кодировщиков.
[Я должен отметить, что не вижу выше]
«Все юнит-тестируют, они не не обязательно осознавать это - ФАКТ »
Подумайте об этом, вы пишете функцию, которая, возможно, анализирует строку и удаляет символы новой строки. Как начинающий разработчик, вы либо запускаете несколько кейсов через командную строку, реализуя ее в Main (), либо объединяете визуальный интерфейс с кнопкой, связываете свою функцию с парой текстовых полей и кнопкой и видите что происходит.
Это модульное тестирование - базовое и плохо скомпонованное, но вы тестируете фрагмент кода для нескольких случаев.
Вы пишете что-то более сложное. Он выдает ошибки, когда вы пропускаете несколько кейсов (модульное тестирование), а вы отлаживаете код и отслеживаете его. Вы смотрите на ценности по мере прохождения и решаете, верны они или нет. В некоторой степени это модульное тестирование.
Модульное тестирование здесь действительно берет это поведение, формализует его в структурированный шаблон и сохраняет его, чтобы вы могли легко повторно запустить эти тесты. Если вы напишете «правильный» модульный тестовый пример вместо ручного тестирования, это займет столько же времени, а может быть и меньше, чем вы наберетесь опыта, и у вас есть возможность повторять его снова и снова
Он выдает ошибки, когда вы пропускаете несколько кейсов (модульное тестирование), а вы отлаживаете код и отслеживаете его. Вы смотрите на ценности по мере прохождения и решаете, верны они или нет. В некоторой степени это модульное тестирование.Модульное тестирование здесь действительно берет это поведение, формализует его в структурированный шаблон и сохраняет его, чтобы вы могли легко повторно запустить эти тесты. Если вы напишете «правильный» модульный тестовый пример вместо ручного тестирования, это займет столько же времени, а может быть и меньше, чем вы наберетесь опыта, и у вас есть возможность повторять его снова и снова
Он выдает ошибки, когда вы пропускаете несколько кейсов (модульное тестирование), а вы отлаживаете код и отслеживаете его. Вы смотрите на ценности по мере прохождения и решаете, верны они или нет. В некоторой степени это модульное тестирование.Модульное тестирование здесь действительно берет это поведение, формализует его в структурированный шаблон и сохраняет его, чтобы вы могли легко повторно запустить эти тесты. Если вы напишете «правильный» пример модульного теста, а не вручную, это займет столько же или, может быть, меньше времени, чем вы наберетесь опыта, и у вас есть возможность повторять его снова и снова
Модульное тестирование здесь действительно берет это поведение, формализует его в структурированный шаблон и сохраняет его, чтобы вы могли легко повторно запустить эти тесты. Если вы напишете «правильный» пример модульного теста, а не вручную, это займет столько же или, может быть, меньше времени, чем вы наберетесь опыта, и у вас есть возможность повторять его снова и снова
Модульное тестирование здесь действительно берет это поведение, формализует его в структурированный шаблон и сохраняет его, чтобы вы могли легко повторно запустить эти тесты. Если вы напишете «правильный» пример модульного теста, а не вручную, это займет столько же или, может быть, меньше времени, чем вы наберетесь опыта, и у вас есть возможность повторять его снова и снова
Я не знаю. Многие места не проводят модульное тестирование, но качество кода хорошее. Microsoft проводит юнит-тесты, но Билл Гейтс на своей презентации показал "голубой экран".
Модульное тестирование поможет вам выпускать программное обеспечение с меньшим количеством ошибок, одновременно снижая общие затраты на разработку. Вы можете щелкнуть ссылку, чтобы узнать больше о преимуществах модульного тестирования