Инициализация 2D массивов как функция их индексов

Я не могу понять, как инициализировать, скажем, массив 101 x 101 f32 со значением, скажем, sin ((xindex-50)*(xindex-50) + (yindex-50*yindex-50)).

я мог бы сделать

array x(seq(-50,50), 101);   // get one of the indices
array pic(101, 101);         // result

но здесь я останавливаюсь, так как не вижу, как сделать перекрестный продукт индексов.

pic(seq(-50,50), seq(-50,50)) = ....  // what do I put on the RHS that will work?

Я уверен, что когда я проснусь завтра, все это будет очевидно, но я не могу сейчас это увидеть. (Это так просто в Halide...)

1 ответ

Вышеупомянутая проблема может быть решена с помощью iota(). Для массива 50 х 50, например,

array rows = iota(dim4(50), dim4(1, 50));  // y values
array cols = iota(dim4(1,50), dim4(50));   // x values
array pic = sin (rows*rows + cols*cols);   // function of x and y per element
Другие вопросы по тегам