Инициализация 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