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

Iteratively removing elements from ArrayFire array

本文关键字:元素 数组 ArrayFire 迭代      更新时间:2023-10-16

我试图在循环中迭代地从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::数组。有没有更习惯/更有效的方法来做到这一点?

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

i被设置为我们想要删除的行,编号从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

如果你希望你的数据在列向量中,将'rows'函数更改为'cols'函数