【问题标题】:how to generate list of sequence number in faster way using python如何使用python以更快的方式生成序列号列表
【发布时间】:2021-12-31 03:20:46
【问题描述】:

任何人都可以改进处理时间来生成序列号列表吗?这是我的代码,它需要 ~ 0.05 秒。

import torch
import time
import random
index = [torch.tensor(660000)]
st = time.time()
allowed = [x for x in range(index[0])] + [x for x in range(index[0] + 1,2000)]
index = random.sample(allowed, 1000)
print(time.time()-st)

请指教

谢谢

【问题讨论】:

  • [x for x in range(index[0])] -> list(range(index[0]))... 但是你为什么需要list?为什么range 对象不够用?
  • 注意,[x for x in whatever] 应该始终只是 list(whatever)
  • 另外,如果numpy.ndarray 可以工作,np.arange 可能更快
  • 如果我们知道您将要如何处理该列表,我们会更容易回答
  • 后面有 random.sample 需要一个列表。实际上,我想在这里使用 github 中的代码 [link] github.com/akwasigroch/Pretext-Invariant-Representations/blob/… 在 return_random 函数中,但我觉得性能很慢

标签: python list performance tensor torch


【解决方案1】:

这应该有助于 OP 特定情况,而不是问题标题中所述的“生成序列号列表”。

您不需要创建整个列表,您可以提供范围,无论范围大小如何,这都会以相同的速度工作。

index = random.sample(range(index[0]), 1000)

在我的机器上,对于 100 万范围大小,它的速度要快约 100 倍


基于this answer

【讨论】:

  • 对不起,我已经编辑了代码。如何在 random.sample 内实现您对范围的建议,例如 [x for x in range(index[0])] + [x for x in range(index[0] + 1,2000)] ?所以,有条件的范围。
  • @AryoWibowo 您可以像我一样对两个范围进行采样,然后您可以为每个样本随机选择要使用的范围(使用加权随机)is_first_range = random.random() < first_range_weight 您也可以对所有样本使用 Numpy 函数这个(np.random.choicenp.random.random
猜你喜欢
  • 2020-06-15
  • 2011-01-30
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多