in reply to Convert matrix formats

Or is it something that could be easily done without the use of modules?

I'm deeply suspicious of questions that seem too easy, but ...

It kinda depends what form you have or obtain the lower-triangle matrix in to start.

But assuming you've loaded the LT matrix into a 2d array, then "converting to a square matrix" consists of padding the upper triangle with zeros, which is one line of perl:

#! perl -slw use strict; use Data::Dump qw[ pp ]; sub fillLTM { my @lt; my $n = 1; push @lt, [ splice @_, 0, $n++ ] while @_; return @lt; } ## read raw data while( my $rawData = <DATA> ) { ## Populate LT matrix my @lt = fillLTM( split ' ', $rawData ); pp \@lt;; ## Pad to square matrix push @{ $lt[$_] }, (0)x( @{ $lt[-1] } - @{ $lt[$_] } ) for 0 .. $# +lt -1;; pp \@lt;; } __DATA__ 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Produces:

C:\test>junk [ [1], [2, 3], [4, 5, 6], [7, 8, 9, 10] ] [ [1, 0, 0, 0], [2, 3, 0, 0], [4, 5, 6, 0], [7, 8, 9, 10] ] [ [1], [2, 3], [4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14, 15] ] [ [1, 0, 0, 0, 0], [2, 3, 0, 0, 0], [4, 5, 6, 0, 0], [7, 8, 9, 10, 0], [11, 12, 13, 14, 15] ]

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: Convert matrix formats
by naturalsciences (Beadle) on Oct 31, 2010 at 14:43 UTC
    No :D no padding with zeroes. I want to make the upper half a symmetrical one to the lower.
      I want to make the upper half a symmetrical one to the lower.

      Ah! Thought it was too easy. That'll take 2 lines :)

      #! perl -slw use strict; use Data::Dump qw[ pp ]; sub fillLTM { my @lt; my $n = 1; push @lt, [ splice @_, 0, $n++ ] while @_; return @lt; } ## read raw data while( my $rawData = <DATA> ) { ## Populate LT matrix my @lt = fillLTM( split ' ', $rawData ); pp \@lt;; for my $y ( 0 .. $#lt -1 ) { push @{ $lt[$y] }, $lt[$_][$y] for $y+1 .. $#{ $lt[-1] }; } pp \@lt;; } __DATA__ 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

      Produces:

      C:\test>junk [ [1], [2, 3], [4, 5, 6], [7, 8, 9, 10] ] [ [1, 2, 4, 7], [2, 3, 5, 8], [4, 5, 6, 9], [7, 8, 9, 10] ] [ [ 1], [ 2, 3], [ 4, 5, 6], [ 7, 8, 9, 10], [11, 12, 13, 14, 15] ] [ [ 1, 2, 4, 7, 11], [ 2, 3, 5, 8, 12], [ 4, 5, 6, 9, 13], [ 7, 8, 9, 10, 14], [11, 12, 13, 14, 15] ]

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        I like your sub there :) Not relevant to my interests but its pretty and understandable (even to a newb like me). What is relevant to my interests is the actual converting part.

        for my $y ( 0 .. $#lt -1 ) { push @{ $lt$y }, $lt$_$y for $y+1 .. $#{ $lt-1 };

        I have some difficulties of understanding it clearly. Can you comment on this by which logic the first for conditions are set ( 0 .. $#lt -1 ) also the combination $# I have not encountered something like this what does it mean?