[no subject]

Awesome!

Thank you Martin!

/Roger

-----Original Message-----
From: Martin Honnen martin.honnen@xxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Sunday, July 12, 2020 5:19 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [EXT] Re: [xsl] How to improve the performance of my matrix
additionfunction?

On 12.07.2020 22:47, Dr. Roger L Costello costello@xxxxxxxxx wrote:

> My application uses lots of matrix operations. I used the SAXON Tool Profile
(-TP) option to generate a web page that shows the performance of each of my
matrix operations. I found that my matrix addition function is taking an
appallingly large amount of time. Below is my matrix addition function. Do you
have suggestions on ways to improve its performance?  /Roger
>
> <!--
>      A matrix can only be added to another matrix if the two matrices
>      have the same dimensions. To add two matrices, just add the
>      corresponding entries, and place this sum in the corresponding
>      position in the matrix which results.
> -->
> <xsl:function name="matrix:addition" as="element(Matrix)">
>      <xsl:param name="M" as="element(Matrix)" />
>      <xsl:param name="N" as="element(Matrix)" />
>      <xsl:param name="name-of-result-matrix" as="xs:string" />
>
>      <Matrix id="{$name-of-result-matrix}">
>          <xsl:for-each select="1 to count($M/row)">
>              <xsl:variable name="i" select="." as="xs:integer"/>
>              <row>
>                  <xsl:for-each select="1 to count($M/row[$i]/col)">
>                      <xsl:variable name="j" select="." as="xs:integer"/>
>                      <col>
>                          <xsl:value-of select="$M/row[$i]/col[$j] +
$N/row[$i]/col[$j]"/>
>                      </col>
>                  </xsl:for-each>
>              </row>
>          </xsl:for-each>
>      </Matrix>
> </xsl:function>

Does it improve performance if you use

     <Matrix id="{$name-of-result-matrix}">
         <xsl:for-each select="$M/row">
             <xsl:variable name="i" select="position()"/>
             <xsl:variable name="row2" select="$N/row[$i]"/>
             <row>
                 <xsl:for-each select="col">
                     <xsl:variable name="j" select="position()"/>
                     <col>
                         <xsl:value-of select=". + $row2/col[$j]"/>
                     </col>
                 </xsl:for-each>
             </row>
         </xsl:for-each>
     </Matrix>

?

Current Thread