在 xtensor 中使用 xt::where 时遇到问题
Having trouble using xt::where in xtensor
我正在尝试在 xarray 中查找某些数组值的索引值。我有一个名为 lattice
的 xarray,其中包含数字 1 到 n,我想要的是
auto x2 = xt::where(lattice == i)
获取 lattice
中元素 i
的索引值,该索引值将用于距离函数,但我收到 ==
与操作数不匹配的消息。当我使用 >
时问题没有发生,所以我只是想知道有什么区别。
我在 python 中使用了 np.where(lattice==i)
,我正在尝试将其翻译过来。
您必须使用 xt::equal(a, b)
而不是 a == b
。实际上,这不同于 a > b
,后者与 xt::greater(a, b)
.
完全相同
另请注意,可以使用 xt::from_indices(...)
将索引列表转换为矩阵,请参阅 documentation。考虑以下示例:
#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;
}
我正在尝试在 xarray 中查找某些数组值的索引值。我有一个名为 lattice
的 xarray,其中包含数字 1 到 n,我想要的是
auto x2 = xt::where(lattice == i)
获取 lattice
中元素 i
的索引值,该索引值将用于距离函数,但我收到 ==
与操作数不匹配的消息。当我使用 >
时问题没有发生,所以我只是想知道有什么区别。
我在 python 中使用了 np.where(lattice==i)
,我正在尝试将其翻译过来。
您必须使用 xt::equal(a, b)
而不是 a == b
。实际上,这不同于 a > b
,后者与 xt::greater(a, b)
.
另请注意,可以使用 xt::from_indices(...)
将索引列表转换为矩阵,请参阅 documentation。考虑以下示例:
#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;
}