[Bioperl-l] sorting and indexing matricies
Morten Lindow
morten at binf.ku.dk
Wed Jun 25 10:31:49 EDT 2003
I think this might help,
(but this _BIO_perl list is probably not the proper place to ask..?)
PD Schloss wrote:
>Hello,
>
>I have a distance matrix that I am working with and I would like to sort
>it so that the columns and rows containing the smallest distance are in
>the first and second rows and columns. I understand how to sort a
>simple array, however, I am confused as to how I do it with an array of
>arrays. I'm a beginner so I realize that constructing a matrix this way
>may not be the most efficient, but at this point I think I would prefer
>to do it this way. If you have any thoughts on how to do this type of
>sort, I'd appreciate it.
>
You can use the sort function - there is a good explanation in the
camel-book, otherwise see this example I use for sorting commaseparated
text files.
#!/usr/bin/perl
#Read comma separated values from STDIN. Output sorted
use warnings;
my @lines = <STDIN>;
my $header = shift @lines;
my @temp = map { [$_, split /,/] } @lines;
@temp = sort {
@a_fields = @$a[1..$#$a];
@b_fields = @$b[1..$#$b];
$a_fields[1] cmp $b_fields[1]
||
$a_fields[3] <=> $b_fields[3]
||
$a_fields[0] cmp $b_fields[0]
} @temp;
my @sorted_lines = map { $_->[0] } @temp;
print STDERR "\nHeader line following:\n$header\n";
print $header;
print @sorted_lines;
exit;
--
Morten
More information about the Bioperl-l
mailing list