【问题标题】:xtensor: Select rows with specific column valuesxtensor:选择具有特定列值的行
【发布时间】:2019-11-13 18:20:03
【问题描述】:

我正在玩xtensor,我只是想执行一个简单的操作来选择具有特定列值的行。想象一下我有以下数组。

[ 
  [0, 1, 1, 3, 4 ]
  [0, 2, 1, 5, 6 ]
  [0, 3, 1, 3, 2 ]
  [0, 4, 1, 5, 7 ]
]

现在我想选择 col2col4 的值为 3 的行。在本例中为 row 3

  [0, 3, 1, 3, 2 ]

我想实现类似于this answer has achieved的东西。

如何在xtensor 中实现这一点?

【问题讨论】:

    标签: c++ xtensor


    【解决方案1】:

    要走的路是用您需要的列进行切片,然后查看所有列的条件在哪里为真。

    对于后者,xt::all(...) 的重载似乎尚未实现(还没有!),但我们可以使用 xt::sum(..., axis) 来实现相同的目的:

    #include <xtensor/xtensor.hpp>
    #include <xtensor/xview.hpp>
    #include <xtensor/xio.hpp>
    
    int main()
    {
      xt::xtensor<int,2> a =
        {{0, 1, 1, 3, 4},
         {0, 2, 1, 5, 6},
         {0, 3, 1, 3, 2},
         {0, 4, 1, 5, 7}};
    
      auto test = xt::equal(xt::view(a, xt::all(), xt::keep(1, 3)), 3);
      auto n = xt::sum(test, 1);
      auto idx = xt::flatten_indices(xt::argwhere(xt::equal(n, 2)));
    
      auto b = xt::view(a, xt::keep(idx), xt::all());
    
      std::cout << b << std::endl;
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2021-07-29
      • 2013-06-22
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多