Цикл ArrayFire GFOR неожиданных ошибок - PullRequest
1 голос
/ 27 июня 2019

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

Я подозреваю, что цикл GFOR не работает с линейными индексами, я прав?

Вот некоторые примеры кода, которые не работают

af::array x(100, 200);
af::array y(100, 200);
af::array xx(100, 200);
gfor(af::seq i, (100 * 200)) {
    xx(i) = x(i) + y(i);
}

Этот должен выполнять простое сложение по элементам (я знаю, что я могу просто сделать xx = x + y, я простохочу показать, что gfor работает не так, как ожидалось).Ошибка: неверный размер ввода: 203 в функции seqToDims.

Еще одна более простая программа, например

af::array x(100, 200);
af::array y(100, 200);
gfor(af::seq i, (100 * 200)) {
    y(i) = x(i) + 1;
}

Та же ошибка.

Я виделдокументация, и я думаю, что gfor не работает с линейными индексами, и мне нужно как-то работать «строка за строкой» или «столбец за столбцом», потому что примеры в документации всегда показывают что-то вроде A (span,i), а не A (i).

Кроме того, я действительно хочу сделать что-то простое: у меня есть: изображение массива (строки, столбцы), массив x_ (8, строки * столбцы)), массив топоров (8,1);и скаляр, который находится по сумме (x_ (span, i) * ax) (на самом деле это скалярное произведение, но функция dot () не поддерживается в gfor), этот скаляр вычисляется с использованием столбцов x_ (sizeиз 8) и топор, который тоже имеет размер 8.

Я хочу

e(i) = image(i) - sum<float>(ax * x_(span,i));

Кажется, я не могу заставить его работать, потому что даже простые циклы gfor над работой, которыенеожиданно, что я делаю не так?

Спасибо!

...