【发布时间】:2013-10-30 17:36:42
【问题描述】:
背景
给定一个这样的矩阵:
X = [1 2 3 4 5;
2 3 4 5 6;
3 4 5 6 7;
4 5 6 7 8]
我们可以看到每个数字都在向右和向下增加。不过方向无关紧要,只要方向/坡度一致即可。
这可以通过以下方式进行测试:
> gradient(X) >= 0;
ans = [1 1 1 1 1;
1 1 1 1 1;
1 1 1 1 1;
1 1 1 1 1]
和
> gradient(X') >= 0 % transpose of X
ans = [1 1 1 1 1;
1 1 1 1 1;
1 1 1 1 1;
1 1 1 1 1]
在这个例子中,我假设数据是向右/向下增加的,延伸到任何统一的方向都不是一项复杂的任务。
这可以组合成完整的测试:
> all(all(gradient(X) > 0)) && all(all(gradient(X') > 0))
ans = 1
问题:
如何检测与此统一方向的任何偏差并“修复”它。 修复应该涉及从周围的点插入一个值。
注意:
在实践中,这些矩阵非常大,包含的值可能只有很小的差异。
我现在假设一次只会有一个偏差,它们不会被组合在一起:例如[1 2 3 2 4 5] (2 is an error),而不是[1 2 3 2 1 4] ([2 1] is an error)
编辑:
[1 2 3 2 4 5] 应该变成 [1 2 3 3.5 4 5] 其中 3.5 是周围点的插值(在本例中是 3 和 4 的平均值)。
编辑2:
忽略插值部分,我稍后会解决。
给定
X =
1 2 3 4 5
2 3 2 5 6
3 4 5 6 7
4 5 6 7 8
2 显然是“错误”。我想要以下输出:
2 3 4
3 2 5
4 5 6
哪个是误差值和周围的点。根据这些点,我将使用 3、3、5 和 5(忽略角点 2、4、4 和 6)进行 2D 插值以(希望)用 4 替换 2。
【问题讨论】:
-
[1 2 3 2 4 5]的正确输出是什么? -
应该去掉 2,用 3 和 4 的平均值代替,得到 3.5:
[1 2 3 3.5 4 5] -
只有一个偏差是行还是列?因为当你在一个方向(例如行)固定一个值时,可能会破坏另一个方向(即列)。
-
列也是如此,我只是使用了一个行示例,因为它更容易显示。
-
平均值有问题。假设您的邻居有 1 个在左边,10 个在上面,11 个在右边和下面。平均值为 8.25,低于 10。可以为两个平均值创建类似示例,其中一个方向违反了另一方向的规则。