我需要使用euklid-distance-algorithm查找下一个邻居。
给出两个散列,每个散列中的100个元素采用这种格式:
$hash{$i}{price}
$hash{$i}{height}
我需要将每个哈希元素彼此进行比较,以便得到100 x 100的矩阵。
此后,我的矩阵应按照以下规则排序:
$hash{$i,$j} {lowest_euklid_distance}
$hash{$i,$j+1}{lowest_euklid_distance + 1}
$hash{$i,$j+2}{lowest_euklid_distance + 2}
.
.
$hash{$i+1,$j}{lowest_euklid_distance}
$hash{$i+1,$j}{lowest_euklid_distance + 2}
.
.
$hash{$i+n,$j+n}{lowest_euklid_distance+n}
我的问题是对这些元素进行正确排序。
有没有住所?
谢谢。
/ edit:添加更多信息:
我使用以下子例程创建距离:
sub euklid_distance{
#w1 = price_testdata
#w2 = height_testdata
#h1 = price_origindata
#h2 = height_origindata
my $w1 = trim($_[0]);
my $w2 = trim($_[1]);
my $h1 = trim($_[2]);
my $h2 = trim($_[3]);
my $result = (((($w2-$w1)**2)+(($h2-$h1)**2))**(1/2));
return $result;
}
我从两个单独的列表中获取测试和原始数据。
具有100x100矩阵的resulthash由以下代码创建:
my %distancehash;
my $countvar=0;
for (my $j=0;$j<100;$j++){
for (my $i=0;$i<100;$i++){
$distancehash{$countvar}{distance} = euklid_distance( $origindata{$i}{price}, $testdata{$j}{price}, $origindata{$i}{height}, $testdata{$j}{height} );
$distancehash{$countvar}{originPrice} = $origindata{$i}{price};
$distancehash{$countvar}{originHeight} = $origindata{$i}{height};
$distancehash{$countvar}{testPrice} = $testdata{$j}{price};
$distancehash{$countvar}{testHeight} = $testdata{$j}{height};
$countvar++;
}
}
其中$ j遍历testdata,而$ i遍历origindata。
我的目标是要有一个新的哈希,该哈希按从当前$ j到最高$ j的最小距离排序。