Итеративное удаление элементов из массива 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. Есть ли более идиоматичный / эффективный способ сделать это?

0

Решение

Предполагая код в вашем примере с использованием столбцов, я бы сделал следующее, так как, похоже, не существует какой-либо функции удаления строки / столбца.

для меня задана строка, которую мы хотим удалить, нумерация начинается с 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

Если вы хотите, чтобы ваши данные были в векторе столбцов, измените функцию ‘lines’ на функцию ‘cols’.

1

Другие решения


По вопросам рекламы [email protected]