0

我试图在循环中迭代地从 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。有没有更惯用/有效的方法来实现这一点?

4

1 回答 1

1

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

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”函数。

于 2015-09-24T16:53:54.867 回答