Is there a way I can modify your code so that in can incorporate any length of sub-array size?

Not really. The basis of the main gain is the well-known optimisation called Loop unrolling.

As with most optimisations, it relies on trading application specific knowledge for generic programing practices. As soon as you put back the generic loop:

my @sums; for my $ref ( @data ) { $sums[ $_ ] += $ref->[ $_ ] for 0 .. $#$ref; } $sums[ $_ ] /= @data for 0 .. 3;

You lose most of the gains.

If your application really calls for best speed, but the size of the sub-array can vary from run to run, then using a dynamic language like Perl does offer one possibility not available with non-dynamic languages. That of code generation.

You could eval a sub into existance at runtime that unrolls the loop to deal with the right number of subarray elements for that particular run, giving you the best of both worlds. Genericity and application specific knowledge.

Whether that is worth the extra complexity and maintenance effort will depend upon the specifics of your application. If you really need the performance, it is worth considering.


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.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

In reply to Re^4: Averaging Elements in Array of Array by BrowserUk
in thread Averaging Elements in Array of Array by neversaint

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.