python - 是否可以使用 pyTorch 创建一个 FIFO 队列?

标签 python machine-learning queue pytorch tensor

我需要在 pyTorch 中创建一个固定长度的 Tensor,它就像一个 FIFO 队列。

我有这个功能可以做到:

def push_to_tensor(tensor, x):
    tensor[:-1] = tensor[1:]
    tensor[-1] = x
    return tensor

例如,我有:

tensor = Tensor([1,2,3,4])

>> tensor([ 1.,  2.,  3.,  4.])

然后使用该函数将给出:

push_to_tensor(tensor, 5)

>> tensor([ 2.,  3.,  4.,  5.])

但是,我想知道:

  • pyTorch 是否有执行此操作的 native 方法?
  • 如果没有,是否有更聪明的方法?

最佳答案

我实现了另一个 FIFO 队列:

def push_to_tensor_alternative(tensor, x):
    return torch.cat((tensor[1:], Tensor([x])))

功能是一样的,但后来我检查了它们在速度方面的表现:

# Small Tensor
tensor = Tensor([1,2,3,4])

%timeit push_to_tensor(tensor, 5)
>> 30.9 µs ± 1.26 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit push_to_tensor_alternative(tensor, 5)
>> 22.1 µs ± 2.25 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

# Larger Tensor
tensor = torch.arange(10000)

%timeit push_to_tensor(tensor, 5)
>> 57.7 µs ± 4.88 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit push_to_tensor_alternative(tensor, 5)
>> 28.9 µs ± 570 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

似乎使用 torch.catpush_to_tensor_alternative(而不是将所有项目向左移动)速度更快。

关于python - 是否可以使用 pyTorch 创建一个 FIFO 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51761806/

相关文章:

tensorflow - 如何在 TensorFlow - keras 中选择密集单位?

python - model.LGBMRegressor.fit(x_train, y_train) 和 lightgbm.train(train_data, valid_sets = test_data) 有什么区别?

c - 从队列中使用 dequeue 方法时抛出异常

python - 如何在 Flask 中使用 MongoEngine 一次向 Mongodb 文档添加多个条目?

python - 使用 Celery 和 Django 收到未注册的任务

python - 从同一组中的每行中减去 groupby 数据框中每组的最后一行

python - Tensorflow 中的 Dice/Jaccard 系数优化

java - 队列中的消息位置/索引(SQS 或 RabbitMQ)

java - Java 中具有并行化的链式过滤器

python - 如何在Python 3中查找嵌套列表中的不同值并找出其差异?