Возникли проблемы при использовании xt :: где в xtensor - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь найти значение индекса определенных значений массива в xarray. У меня есть заполненный xarray lattice, который содержит числа от 1 до n, и я хотел бы что-то вроде

auto x2 = xt::where(lattice == i)

, чтобы получить значения индекса элемента i в lattice, который будет использоватьсядля функции расстояния, но я получаю сообщение, что == не соответствует операндам. Проблема не возникает, когда я использую >, поэтому мне просто интересно, в чем разница.

Я использовал np.where(lattice==i) в Python, и я пытаюсь перевести его.

1 Ответ

0 голосов
/ 21 октября 2019

Вам придется использовать xt::equal(a, b) вместо a == b. На самом деле это отличается от, например, a > b, который полностью совпадает с xt::greater(a, b).

Обратите внимание, что список индексов можно преобразовать в матрицу с помощью xt::from_indices(...), см. Документацию . Рассмотрим следующий пример:

#include <xtensor/xtensor.hpp>
#include <xtensor/xio.hpp>

int main()
{
    xt::xtensor<size_t,2> a = xt::arange(5 * 5).reshape({5, 5});
    size_t i = 4;
    xt::xtensor<size_t,2> idx = xt::from_indices(xt::where(xt::equal(a, i)));
    std::cout << idx << std::endl;
    return 0;
}
...