Я использую tyring, чтобы сделать мой код быстрее, удалив некоторые из циклов и используя массивы. Самый медленный шаг прямо сейчас - генерация случайных списков.создать двумерный массив numpy.random.choice без замены
контексте: У меня есть ряд мутаций в хромосоме, я хочу выполнить 1000 случайных «хромосом» с одинаковой длиной и одинаковым числом мутаций, но их положения рандомизированы.
вот что я в настоящее время работает, чтобы генерировать эти рандомизированные позиции мутации:
iterations=1000
Chr_size=1000000
num_mut=500
randbps=[]
for k in range(iterations):
listed=np.random.choice(range(Chr_size),num_mut,replace=False)
randbps.append(listed)
Я хочу сделать что-то подобное тому, что они охватывают в this question
np.random.choice(range(Chr_size),size=(num_mut,iterations),replace=False)
однако без замены применяется к массив в целом.
далее контекст: в сценарии я пройти через каждый рандомизированного хромосоме и подсчета числа мутаций в данном окне:
for l in range(len(randbps)):
arr=np.asarray(randbps[l])
for i in range(chr_last_window[f])[::step]:
counter=((i < arr) & (arr < i+window)).sum()
Вы не хотите какой-либо из 'listed's быть тем же самым, что означает' элементы randbps' должен быть уникальным ? – ayhan
Это вызвано долгой проблемой производительности: https://github.com/numpy/numpy/issues/2764 –