关于ics lab8 performance中的smooth
其实smooth比rotate水很多。
首先看一下avg的定义,发现是二层循环,最大遍历3*3最小遍历2*2的元素,用二层循环未免太不高效了。我们的任务就是把他展开。
展开时要注意边界,四个角的元素周围四个取平均,四条边上的要六个取平均,中间的元素才是九个取平均,我的建议是先算角再算边最后算中间。
运算的时候要直接按照线性结构访问矩阵,如果外层循环变量是i,内层是j,那么它实际的下标就应该是i*dim+j。其实为了避免反复运算那个乘法,大家可以新定义个变量每次递增dim。
首先看一下avg的定义,发现是二层循环,最大遍历3*3最小遍历2*2的元素,用二层循环未免太不高效了。我们的任务就是把他展开。
展开时要注意边界,四个角的元素周围四个取平均,四条边上的要六个取平均,中间的元素才是九个取平均,我的建议是先算角再算边最后算中间。
运算的时候要直接按照线性结构访问矩阵,如果外层循环变量是i,内层是j,那么它实际的下标就应该是i*dim+j。其实为了避免反复运算那个乘法,大家可以新定义个变量每次递增dim。
设当前的下标为k的话,那么它周围的元素下标如下图: