Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

printf matrix

by madM (Beadle)
on Jan 06, 2014 at 12:40 UTC ( #1069505=perlquestion: print w/ replies, xml ) Need Help??
madM has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks and happy new year! Im trying to print a matrix with this format but im not having further ideas on how to do this.. any suggestions?
# * column uses minimum score A R N D C Q E G H I L K M F P S T W Y V B Z X + * A 5 -2 -1 -2 -1 -1 -1 0 -2 -1 -2 -1 -1 -3 -1 1 0 -3 -2 0 -2 -1 -1 + -5 R -2 7 -1 -2 -4 1 0 -3 0 -4 -3 3 -2 -3 -3 -1 -1 -3 -1 -3 -1 0 -1 + -5 N -1 -1 7 2 -2 0 0 0 1 -3 -4 0 -2 -4 -2 1 0 -4 -2 -3 4 0 -1 + -5 D -2 -2 2 8 -4 0 2 -1 -1 -4 -4 -1 -4 -5 -1 0 -1 -5 -3 -4 5 1 -1 + -5 C -1 -4 -2 -4 13 -3 -3 -3 -3 -2 -2 -3 -2 -2 -4 -1 -1 -5 -3 -1 -3 -3 -2 + -5 Q -1 1 0 0 -3 7 2 -2 1 -3 -2 2 0 -4 -1 0 -1 -1 -1 -3 0 4 -1 + -5 E -1 0 0 2 -3 2 6 -3 0 -4 -3 1 -2 -3 -1 -1 -1 -3 -2 -3 1 5 -1 + -5 G 0 -3 0 -1 -3 -2 -3 8 -2 -4 -4 -2 -3 -4 -2 0 -2 -3 -3 -4 -1 -2 -2 + -5 H -2 0 1 -1 -3 1 0 -2 10 -4 -3 0 -1 -1 -2 -1 -2 -3 2 -4 0 0 -1 + -5 I -1 -4 -3 -4 -2 -3 -4 -4 -4 5 2 -3 2 0 -3 -3 -1 -3 -1 4 -4 -3 -1 + -5 L -2 -3 -4 -4 -2 -2 -3 -4 -3 2 5 -3 3 1 -4 -3 -1 -2 -1 1 -4 -3 -1 + -5 K -1 3 0 -1 -3 2 1 -2 0 -3 -3 6 -2 -4 -1 0 -1 -3 -2 -3 0 1 -1 + -5 M -1 -2 -2 -4 -2 0 -2 -3 -1 2 3 -2 7 0 -3 -2 -1 -1 0 1 -3 -1 -1 + -5 F -3 -3 -4 -5 -2 -4 -3 -4 -1 0 1 -4 0 8 -4 -3 -2 1 4 -1 -4 -4 -2 + -5 P -1 -3 -2 -1 -4 -1 -1 -2 -2 -3 -4 -1 -3 -4 10 -1 -1 -4 -3 -3 -2 -1 -2 + -5 S 1 -1 1 0 -1 0 -1 0 -1 -3 -3 0 -2 -3 -1 5 2 -4 -2 -2 0 0 -1 + -5 T 0 -1 0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1 2 5 -3 -2 0 0 -1 0 + -5 W -3 -3 -4 -5 -5 -1 -3 -3 -3 -3 -2 -3 -1 1 -4 -4 -3 15 2 -3 -5 -2 -3 + -5 Y -2 -1 -2 -3 -3 -1 -2 -3 2 -1 -1 -2 0 4 -3 -2 -2 2 8 -1 -3 -2 -1 + -5 V 0 -3 -3 -4 -1 -3 -3 -4 -4 4 1 -3 1 -1 -3 -2 0 -3 -1 5 -4 -3 -1 + -5 B -2 -1 4 5 -3 0 1 -1 0 -4 -4 0 -3 -4 -2 0 0 -5 -3 -4 5 2 -1 + -5 Z -1 0 0 1 -3 4 5 -2 0 -3 -3 1 -1 -4 -1 0 -1 -2 -2 -3 2 5 -1 + -5 X -1 -1 -1 -1 -2 -1 -1 -2 -1 -1 -1 -1 -1 -2 -2 -1 0 -3 -1 -1 -1 -1 -1 + -5 * -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 + 1 I wrote this so far.. my @aminos=qw(A R N D C Q E G H I L K M F P S T W Y + V B Z X); foreach my $key (sort keys %$A){ print $key." "x2; foreach my $key2 (sort keys %{$A->{$key}}){ printf("%.2f ", $A->{$key}->{$key2}); } } print "\n"x10; }

Comment on printf matrix
Download Code
Re: printf matrix
by Ratazong (Prior) on Jan 06, 2014 at 13:42 UTC

    Hi,

    I think the biggest problem in your solution is that all values are printed in one line. Instead you should start each $key in a new line. That way it would look more like a matrix, and you could improve the rest of your output.

    The easiest way to solve this would be to change your third line to

    print "\n$key ";
    HTH, Rata

Re: printf matrix
by kcott (Abbot) on Jan 06, 2014 at 13:56 UTC

    G'day madM,

    There's a whole series of problems with your post:

    • We don't need to see hundreds of data items (you've posted over 500 here); just post sufficient to support whatever issue you're describing.
    • You don't show your input data structure (presumably a hashref with the meaningless name $A).
    • You don't show the output you want.
    • You don't tell us what part of the code you're having difficulties with.
    • You show an @aminos array but don't use it in your code.
    • Your printf format suggests floating point data but all data shown are integers.
    • You've used the repetition operator (x) in two places that suggests you don't fully understand what this is for. It's explained in "perlop: Multiplicative Operators".

    Overall, it's very difficult to ascertain what exactly you need help with. Please read the guidelines in "How do I post a question effectively?" to find out how to compose a question that will help us to help you.

    As indicated by the printf documentation, you should look at sprintf for information on formats.

    Here's a best guess at what you're trying to achieve. If my guess is wrong (which is quite likely), it should at least provide some pointers for improving your code.

    #!/usr/bin/env perl use strict; use warnings; my %data = ( A => { A => 5, R => -2, N => -1 }, R => { A => -2, R => 7, N => -1 }, N => { A => -1, R => -1, N => 7 }, ); my @keys = sort keys %data; print ' '; printf "%4s" => $_ for @keys; print "\n"; for my $row (@keys) { print $row; printf "%4s" => $data{$row}{$_} for @keys; print "\n"; }

    Output:

    A N R A 5 -1 -2 N -1 7 -1 R -2 -1 7

    -- Ken

      thanks for your post ! i will look after the points you pointed out to post in the future in a better way .. happy new year !;)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1069505]
Approved by marto
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2015-02-28 03:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    On my keyboard, Caps lock is:








    Results (458 votes), past polls