Присвоение массива многомерному массиву - PullRequest
0 голосов
/ 01 марта 2019

Это очень похоже / связано с Назначение в многомерных массивах Xtensor .

У меня более или менее та же проблема, и мне интересно, есть ли что-нибудь лучшее, что можно сделать?В конце ответ, помеченный как правильный, все еще требует поэлементного присваивания в конце и не дает возможности назначить целый массив сразу данной оси.

В качестве примера, в numpy-python я мог бы сделать что-то вроде

x = np.zeros((2,2))
x[0] = np.ones(2)
print(x)

, что при запуске вернуло бы

 [[ 1.  1.]
 [ 0.  0.]]

Теперь в xtensor, яхотел бы сделать что-то похожее, то есть, назначить целый массив вдоль определенной оси.Я попробовал

xt::xarray<double> x = xt::zeros<double>({2,2});
x(0) = xt::ones<double>({2});

, но это не работает - по сути, это тот же вопрос, что и OP.Теперь предлагаемое решение:

xt::xarray<double> x = xt::zeros<double>({2,2});
for(int =0; i < 2;i++){
x(0,i) = 1;
}

. Это дает правильный результат - однако, это все еще требует, чтобы я зациклился на оси отверстия вместо того, чтобы назначать массив всему объекту напрямую.Сравните это с

xt::xarray<double> x;
x = xt::zeros<double>({2})

, который позволяет мне назначать целый массив сразу, если у меня есть одномерный массив.Есть ли какой-либо эквивалент этого для назначения массива вдоль данной оси в структурах с более высокими размерами?

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете использовать представления для достижения того, что вы хотите:

xt::xarray<double> x = xt::zeros<double>({2,2});
xt::view(x, 0) = xt::ones<double>({2});

См. документацию представления для получения более подробной информации

...