0
perl package Algorithm :: Cluster將一個鋸齒狀數組作爲一個輸入。有 是在該包14_kmedoids.t其中包含這樣的示例:使用push爲Algorithm :: Cluster生成鋸齒陣列?
my $matrix = [
[],
[ 3.4],
[ 4.3, 10.1],
[ 3.7, 11.5, 1.1],
[ 1.7, 4.1, 3.4, 3.4],
[10.1, 20.5, 2.5, 2.7, 9.8],
[ 2.5, 3.7, 3.1, 3.6, 1.1, 10.1],
[ 3.4, 2.2, 8.8, 8.7, 3.3, 16.6, 2.7],
[ 2.1, 7.7, 2.7, 1.9, 1.8, 5.7, 3.4, 5.2],
[ 1.6, 1.8, 9.2, 8.7, 3.4, 16.8, 4.2, 1.3, 5.0],
[ 2.7, 3.7, 5.5, 5.5, 1.9, 11.5, 2.0, 1.7, 2.1, 3.1],
[10.0, 19.3, 1.0, 3.7, 9.1, 1.2, 9.3, 15.7, 6.3, 16.0, 11.5]
];
my ($clusters, $error, $found);
my %params1 = (
nclusters => 4,
distances => $matrix,
npass => 10000,
($clusters, $error, $found) = Algorithm::Cluster::kmedoids(%params1);
在該測試作品交錯數組的靜態聲明。但是,當我嘗試製作類似的鋸齒陣列動態時,使用如下推式:
my @sq_dm;
# code omitted that fills sq_dm with data
my @matrix;
for($i=0; $i<$rowcount;++$i){
my @row=();
for($j=0; $j<=$i;++$j){
push @row, $sq_dm[$i][$j];
}
push @matrix, @row;
}
生成的矩陣不起作用。它失敗:
Row 0 is not an array at ./kcluster_my_script.pl line 119.
其中線119是這一個:
($clusters, $error, $found) = Algorithm::Cluster::kmedoids(%params1);
靜態矩陣似乎開始與一個空行,這可能是問題,但 怎麼可能一個推空行?那空行是否有特殊用途?
還要注意,在動態的一個是@matrix,而在靜態的一個是$矩陣。除非使用@matrix,否則我無法使用push構建鋸齒陣列。
這是RHEL 5.11上的per 5.8.8。
謝謝。
謝謝,這工作。你可以在靜態聲明的第一行解釋空數組的目的嗎?如果它被省略,kmedoids函數會投訴並退出。是否有一些規則,一個數組或數組必須以一個空數組開始,還是隻是這個特定包的一個要求? – mathog 2014-10-06 18:51:35
這只是該特定模塊的一個要求。 – Miller 2014-10-06 18:56:48