xsl-list
[Top] [All Lists]

Re: [xsl] A super-efficient way to compute the sum of A[i] * B[i] for i=1 to n?

2020-05-09 07:18:52
Am 09.05.2020 um 13:59 schrieb Costello, Roger L. costello(_at_)mitre(_dot_)org:
Hi Folks,

I need a super-efficient way to compute the sum of A[i] * B[i] for i=1 to n.

For example, suppose A is this:

<row>
     <col>0.9</col>
     <col>0.3</col>
</row>

and B is this:

<row>
     <col>0.2</col>
     <col>0.8</col>
</row>

I want to compute:

(0.9 * 0.2) + (0.3 * 0.8)

Here's one way to do it:

sum(for $i in 1 to count($A/col) return number($A/col[$i]) * number($B/col[$i]))

I suspect that is not the most efficient approach.

What is the most efficient approach? I will be doing hundreds of thousands of 
these computations, so I want to use the most efficient approach.

You can express it a bit more nicely in XPath 3 with higher-order
functions as

  sum(for-each-pair($A/col, $B/col, function($a, $b) { $a * $b}))

but whether that performs better or worse is something you can only measure.
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>