【发布时间】:2009-12-18 20:39:24
【问题描述】:
这是在 C 中。
我有两个二维数组,ArrayA 和 ArrayB,它们对相同的空间进行采样。 B 对与 ArrayA 不同的属性进行采样的频率低于 ArrayA,因此它比 A 小。
只是尝试定义一些变量: ArrayA:SizeAX by SizeAY,由 indexA 索引位置 posAX, posAY ArrayB:SizeBX by SizeAY,由 indexB 索引位置 posBX, posBY
ArrayA 和 ArrayB 是指向数组开头的指针,其中先存储 X 的行,然后 Y 递增,然后存储下一行 X (Y=1)
所以我需要从给定的 indexA 中设置 indexB,使其成为最近邻样本,以与 indexA 的值相关联。
这是我所在的位置(请更正任何错误!请注意,我从索引 0 开始): 如果 ArrayA 是 9x9 而 ArrayB 是 3x3: (posX,posY) 位置 0,0;索引A = 0 POSB 0,0; indexB = 0
posA 8,0; indexA = 8(第一行结束) posB 2,0; indexB = 2
posA 0,1;指数A = 9 POSB 0,0; indexB = 0(仍然更接近底部)
posA 0,3;指数A = 27 位置 0,1; indexB = 3
posA 8,8; indexA = 80(最后一点) posB 2,2;指数B = 8
到目前为止,我有: indexA = posAX + (posAY * SizeAX)
我尝试过的(当然失败了): indexB = (int) (indexA * (SizeBX * SizeBY / (SizeAX * SizeAY)) + 0.5) // 似乎只适用于第一行和最后一个值..但这显然不起作用 - 但我很好奇到底它是如何将两者映射在一起的,但我会在修复它之后进行研究..
我无法访问 posAY 或 posAX,只能访问 indexA,但我应该可以使用 mod 和余数将其分解,对吧?还是有更有效更快的方法?一个
我也试过这个:
indexB = (posAY * SizeBY / SizeAY) * SizeBY + (posAX * SizeBX / SizeAX)
我认为问题是我需要将 X 和 Y 索引分开,然后使用 SizeBX 和 SizeBY?
一个额外的警告是 ArrayA 和 ArrayB 来自更大的数据集,它们都采样了更大的空间。由于矩形是任意的,因此 ArrayA 或 ArrayB 的点可能最接近矩形的边界,从而导致其他问题,即最近邻居真正抓取的方式。我也不确定如何解决这个问题。
【问题讨论】:
标签: c pointers indexing multidimensional-array nearest-neighbor