Это список инициализации. Он инициализирует элементы до того, как будет запущен тело конструктора. Рассмотрим
class Foo {
public:
string str;
Foo(string &p)
{
str = p;
};
};
vs
class Foo {
public:
string str;
Foo(string &p): str(p) {};
};
. В первом примере str будет инициализироваться конструктором без аргументов
string();
перед телом конструктора Foo. Внутри конструктора foo
string& operator=( const string& s );
будет вызываться на 'str', как вы делаете str = p;
. Во втором примере str будет инициализироваться непосредственно вызовом его конструктор
string( const string& s );
с «p» в качестве аргумента.
Как уже отмечалось @ 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])
Я не понимаю, почему вы хотите использовать генератор. Список на самом деле не имеет значения здесь.
Вопрос в следующем: хотите ли вы сначала создать свои данные в Python и затем переместить в PyTorch (в большинстве случаев медленнее) или вы хотите создать его непосредственно в PyTorch .
(Генератор всегда сначала создает данные в Python)
Так что если вы хотите загрузить данные , история будет другой, но если вы хотите генерировать данные Я не вижу причин, почему вы не должны делать это в PyTorch напрямую .
Если вы хотите напрямую создать свой список в PyTorch для своего примера, вы можете сделать это, используя arange
и pow
:
torch.arange(10).pow(2)
Вывод:
tensor([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
< hr> torch.arange(10)
работает так же, как range
в python, так что он такой же универсальный range
. Тогда pow(2)
просто переводит ваш тензор во 2-ю степень.
Но вы также можете выполнять все другие виды вычислений вместо pow
, как только вы создали свой тензор, используя arange
.