我试图在循环中迭代地从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。是否有更惯用/更有效的方法来实现这一目标?
答案 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”功能。