迭代地从ArrayFire数组中删除元素

时间:2015-08-17 20:43:05

标签: c++ gpu arrayfire

我试图在循环中迭代地从ArrayFire数组(af :: array)中删除元素。说我有:

af::array arr = af::range(af::dim4(4), -1, u32) + 1);
// arr = [1 2 3 4] (it's a column vector, though shown as a row vector here)

在循环的每次迭代中,我必须从数组中删除一个值。要删除的值取决于计算,其结果并不总是相同。因此,在循环的4次迭代中,进程可以看起来像:

// Iter 1: arr = [1 3 4] (removed 2)
// Iter 2: arr = [1 4]   (removed 3)
// Iter 3: arr = [4]     (removed 1)
// Iter 4: arr = empty   (removed 4)

我想知道是否有人建议如何最好地完成这项工作。我有一项技术工作,需要将arr转换为C数组,删除元素,并重新转换回设备af :: array。是否有更惯用/更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

假设您的示例中的代码使用了列,我会执行以下操作,因为似乎没有任何类型的行/列删除功能。

我被设置为我们想要删除的行,编号从0开始:

int i=2;
arr = af::join(0,arr.rows(0,i-1), arr.rows(i+1,end));
af::af_print(arr);

打印:

 arr [3 1 1 1]
          1
          2
          4

如果您希望将数据放在列向量中,请将“行”功能更改为“cols”功能。