Perl结构中的元素排序n x n

时间:2019-05-30 16:10:11

标签: perl knn

我需要使用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的最小距离排序。

0 个答案:

没有答案