请看图表和数据。什么方法或算法找到最接近的匹配(最大的相似性)之间的地块"px4“和其他图形。如有任何C#库或VF-图识别算法可用于此问题,将不胜感激。

数据
enr px1 px2 px3 px4 px5 px6
1 90 5 15 20 60 10
2 70 10 20 30 85 15
3 100 15 15 10 32 18
4 80 20 8 3 9 44
5 60 25 3 5 15 12
6 50 30 12 8 24 16
7 70 18 28 24 70 25
8 90 12 32 28 84 22
9 75 20 12 15 45 16
10 65 10 20 18 54 25发布于 2012-04-04 08:03:06
我不是统计学专家。但是..。我取一个图,比较每个点和另一个点上的等价点之间的差别,每次一个点。我会使用Math.Abs()将这10个差异中的每一个转换为正数,然后使用任何方法(均值、中值等)。你希望,取这10种差异的平均数。我会重复每一个其他情节的比较。大部分的计算都可以在此过程中放弃,您只需要保留每个地块的平均数。最小的平均值可能是最接近匹配的地块。
因为我今天没什么事要做.
Dictionary<string, int[]> plots = new Dictionary<string, int[]>();
plots.Add("px1", new int[] { 90, 70, 100, 80, 60, 50, 70, 90, 75, 65 });
plots.Add("px2", new int[] { 5, 10, 15, 20, 25, 30, 18, 12, 20, 10 });
plots.Add("px3", new int[] { 15, 20, 15, 8, 3, 12, 28, 32, 12, 20 });
plots.Add("px4", new int[] { 20, 30, 10, 3, 5, 8, 24, 28, 15, 18 });
plots.Add("px5", new int[] { 60, 85, 32, 9, 15, 24, 70, 84, 45, 54 });
plots.Add("px6", new int[] { 10, 15, 18, 44, 12, 16, 25, 22, 16, 25 });
string test = "px4";
string winner = string.Empty;
double smallestAverage = double.MaxValue;
foreach (string key in plots.Keys)
{
if (key == test)
{
continue;
}
int[] a = plots[test];
int[] b = plots[key];
double count = 0;
for (int point = 0; point <= 9; point++)
{
count += Math.Abs(a[point] - b[point]);
}
double average = count / 10;
if (average < smallestAverage)
{
smallestAverage = average;
winner = key;
}
}
Console.WriteLine("Winner: {0}", winner);发布于 2012-04-04 09:04:59
从字面上看,有无数种方法来定义两个图之间的“差异”。
如果你把你的图当作10维向量,你可以用一个向量范数。
如果您想在间隔1,10上将它们视为实值函数,您可以在L^p-空间上使用范数。(虽然这应该涉及到积分,但由于您的函数都是由直线段组成的,所以可以精确地计算这个范数,而不必对积分进行数值逼近。)
实际上,您需要决定如何定义“相似”,然后选择一个您期望的方法。
https://stackoverflow.com/questions/10006909
复制相似问题