从生成器创建火炬张量

Jes*_*sse 6 pytorch

我尝试从生成器构造张量,如下所示:

>>> torch.tensor(i**2 for i in range(10))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: Could not infer dtype of generator
Run Code Online (Sandbox Code Playgroud)

目前我只做:

>>> torch.tensor([i**2 for i in range(10)])
tensor([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])
Run Code Online (Sandbox Code Playgroud)

有没有办法避免需要此中间列表?

Que*_*ker 8

正如@blue-phoenox 已经指出的那样,最好使用内置的 PyTorch 函数直接创建张量。但如果您必须处理生成器,建议使用 numpy 作为中间阶段。由于 PyTorch 避免复制 numpy 数组,因此它应该具有相当的性能(与简单的列表理解相比)

>>> import torch
>>> import numpy as np
>>> torch.from_numpy(np.fromiter((i**2 for i in range(10)), int))
tensor([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])
Run Code Online (Sandbox Code Playgroud)