我试图在numpy数组中得到所有重复元素的索引,但我现在发现的解决方案对于大型(> 20000个元素)输入数组来说是非常低效的(它需要大约9秒钟).这个想法很简单:
records_array是一个numpy时间戳数组(timedate),我们要从中提取重复时间戳的索引
time_array 是一个numpy数组,包含重复的所有时间戳 records_array
records是一个包含一些Record对象的django QuerySet(可以很容易地转换为列表).我们想要创建一个由Record的tagId属性的所有可能组合形成的对的列表,对应于从中找到的重复时间戳records_array.
这是我目前的工作(但效率低下)代码:
tag_couples = [];
for t in time_array:
users_inter = np.nonzero(records_array == t)[0] # Get all repeated timestamps in records_array for time t
l = [str(records[i].tagId) for i in users_inter] # Create a temporary list containing all tagIds recorded at time t
if l.count(l[0]) != len(l): #remove tuples formed by the first tag repeated
tag_couples +=[x for x in itertools.combinations(list(set(l)),2)] # Remove duplicates with list(set(l)) and append all …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过使用 numpy 数组删除 for 循环和列表理解来优化我的代码。总的来说,现在代码的执行速度更快了,但是有一件事情让我很困扰:将我的包含大约 110000 个元素的列表转换为 numpy 数组需要程序运行时的大部分时间(5 到 7 秒,只是为了初始化一个数组!)
我有这个
rec = np.array(records)
Run Code Online (Sandbox Code Playgroud)
哪里records是对象列表。
是否可以加快创建这个 numpy 数组的速度?