我有以下代码:
import random
import numpy as np
import pandas as pd
num_seq = 100
len_seq = 20
nts = 4
sequences = np.random.choice(nts, size = (num_seq, len_seq), replace=True)
sequences = np.unique(sequences, axis=0) #sorts the sequences
d = {}
pr = 5
for i in range(num_seq):
globals()['seq_' + str(i)] = np.tile(sequences[i,:],(pr,1))
d['seq_' + str(i)] = np.tile(sequences[i,:],(pr,1))
pool = np.empty((0,len_seq),dtype=int)
for i in range(num_seq):
pool = np.concatenate((pool,eval('seq_' +str(i))))
我想将字典d
转换成一个Numpy数组(或者只包含一个条目的字典)。我的代码可以工作,生成pool
。然而,当num_seq
、len_seq
和pr
的值较大时,需要很长时间
执行时间非常关键,因此我的问题是:有没有更有效的方法
以下是要点列表:
np.concatenate
在O(n)
中运行,因此第二个循环在O(n^2)
时间内运行。您可以将该值附加到列表中,并np.vstack
最后添加所有值(在O(n)
时间内)李>globals()
速度很慢,而且众所周知这是一种糟糕的做法(因为它很容易以令人讨厌的方式破坏代码)李>eval(...)
也很慢而且不安全,所以要避免它李>下面是一个更快的代码示例(替换第二个循环):
相关问题 更多 >
编程相关推荐