-1

我有一个基于 MySQL 数据生成数组哈希的程序。每个数组中都有数值。使用 Perl,如何生成每个数组的熵并将结果输出到单独的 MySQL 表中?新表应具有以下列:

 ID         Array           Entropy
 -----      -----           -----
 1          topic(key)      entropy of all values belonging to the topic

这是生成数组哈希的当前程序:

my %values_by_topic; 
my $sth = $dbh->prepare('SELECT Topic, Value FROM Table'); 
$sth->execute(); 
while (my $row = $sth->fetch()) {    
   my ($topic, $value) = @$row;     
   push @{ $values_by_topic{$topic} }, $value; 
}
4

1 回答 1

1

你问了两个问题:

  • 如何生成每个数组的熵?
  • 如何在单独的 MySQL 表中输出结果?

首先是您告诉我们,我们帮助您实施。

第二个回答如下。

my $sth_select = $dbh->prepare('
   SELECT Topic,
          Value
     FROM Table1
    ORDER BY Topic
');

my $sth_insert = $dbh->prepare('
   INSERT INTO Table2
             Topic,
             Entropy
          ) VALUES (
             ?, ?
          )
');

my $last_topic;
my @values;
$sth_select->execute();
while (my $row = $sth_select->fetch()) {
    my ($topic, $value) = @$row;

    if (@values && $topic ne $last_topic) {
        my $entropy = calculate_entropy(@values);
        $sth_insert->execute($last_topic, $entropy);
        @values = ();
    }

    $last_topic = $topic;
    push @values, $value;
}

if (@values) {
    my $entropy = calculate_entropy(@values);
    $sth_insert->execute($last_topic, $entropy);
    @values = ();
}

笔记:

对于给定的数据库句柄,某些数据库不能有两个打开的语句句柄。如果 MySQL 是这样的,只需创建两个数据库句柄。

锁定和事务留给读者作为练习。(或者有人可以编辑它。)

于 2012-09-20T20:06:34.420 回答