想象你有这张照片
[[1 2 3] [4 5 6] [7 8 90]]
您将其展平为这种格式-
[1 2 3 4 5 6 7 8 90]
现在,您将获得像素90的索引为8。 您如何找到像素90位于第3行和第3列?
答案 0 :(得分:2)
OpenCL与其他编程语言(例如C,C ++,Java等)类似,使用zero based indexing。因此,按照这种说法,您正在寻找第2行和第2列。
现在要计算哪一行需要将索引位置8除以列数:
8 / 3 = 2
所以从零开始的索引是第二行。
现在要计算我们使用模运算符的列:
8 % 3 = 2
答案 1 :(得分:0)
在2D情况下,尺寸为(sx,sy)的矩形中的点(x,y)可以在一维空间中由线性索引n表示,如下所示:
n = x+y*sx
将一维索引n转换回(x,y)的工作原理如下:
x = n%sx
y = n/sx
对于3D情况,可以将尺寸为(sx,sy,sz)的框中的点(x,y,z)用一维表示为
n = x+(y+z*sy)*sx
并像这样转换回(x,y,z):
z = n/(sx*sy);
temp = n%(sx*sy);
y = temp/sx;
x = temp%sx;
请注意,这里的“ /”表示整数除法(始终将结果四舍五入),“%”是取模运算符。