Xtensor добавить значения в нижней части тензора? - PullRequest
0 голосов
/ 08 марта 2020

Предположим, я пытаюсь сместить (не поразрядно) тензор значений на n, а затем добавить NaN внизу, чтобы заполнить смещение смещения.

int n = 2;

  1. оригинал {{1., 2., 3., 4.}}
xt::xtensor_fixed<float, xt::xshape<1, 4>, xt::layout_type::column_major> original = {{ 1., 2., 3., 4. } };
значения для сохранения следующего смещения n {{3., 4.}}
auto shiftvalues = xt::view(original, xt::all(), xt::range(n, original.size()));
после вставки nans для соответствия оригинальному размеру {{3., 4., nan, nan}}
(?)shiftvalues.appendBottom(std::numeric_limits<double>::quiet_NaN());
(?)shiftvalues.appendBottom(std::numeric_limits<double>::quiet_NaN());
int n = 2;
xt::xtensor_fixed<float, xt::xshape<1, 4>, xt::layout_type::column_major> original = {{ 1., 2., 3., 4. } };
auto shiftvalues = xt::view(original, xt::all(), xt::range(n, original.size()));

Как бы я go вставил значения NaN в тензор, следующий за шагами 1 и 2? Мне не удалось найти какие-либо методы в документации для добавления значений в конец тензора.

Или лучше создать тензор того же размера, что и original, заполнить его NaNs, затем установите значения для соответствующих индексов на shiftvalues?

Спасибо

1 Ответ

0 голосов
/ 08 марта 2020

Неважно понял это

int n = 2;
xt::xtensor_fixed<float, xt::xshape<1, 4>, xt::layout_type::column_major> original = {{ 1., 2., 3., 4. } };
xt::xtensor<float, 2>::shape_type sh1 = {1, n};

auto offsetfill = xt::full_like(xt::empty<float>(sh1), std::numeric_limits<double>::quiet_NaN());
auto shiftvalues = xt::view(original, xt::all(), xt::range(n, original.size()));

auto result = xt::concatenate(xt::xtuple(shiftvalues, offsetfill), 1);
std::cout << result << std::endl;

{{3., 4., nan., Nan.}}

Это немного обходной путь, я полагаю, традиционным способом нет добавляемых значений.

  1. Создание формы с заданным размером смещения n
  2. Поместить форму во временный тензор. Заполните временный тензор значением выбора.
  3. Нарежьте оригинальный тензор, чтобы сохранить нужные значения.
  4. Объедините 3 и 2, чтобы получить желаемый результат
...