mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-16 23:30:24 +01:00
Documentation updated
This commit is contained in:
parent
4ab7905fff
commit
ec4084a29c
2 changed files with 154 additions and 8 deletions
|
@ -53,6 +53,9 @@
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#matmul">matmul</a>
|
<a class="function" href="#matmul">matmul</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="function" href="#jack_matmul">jack_matmul</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="function" href="#inv">inv</a>
|
<a class="function" href="#inv">inv</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -102,7 +105,7 @@
|
||||||
<div class="codehilite"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
<div class="codehilite"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||||
<span class="kn">from</span> <span class="nn">autograd</span> <span class="kn">import</span> <span class="n">jacobian</span>
|
<span class="kn">from</span> <span class="nn">autograd</span> <span class="kn">import</span> <span class="n">jacobian</span>
|
||||||
<span class="kn">import</span> <span class="nn">autograd.numpy</span> <span class="k">as</span> <span class="nn">anp</span> <span class="c1"># Thinly-wrapped numpy</span>
|
<span class="kn">import</span> <span class="nn">autograd.numpy</span> <span class="k">as</span> <span class="nn">anp</span> <span class="c1"># Thinly-wrapped numpy</span>
|
||||||
<span class="kn">from</span> <span class="nn">.obs</span> <span class="kn">import</span> <span class="n">derived_observable</span><span class="p">,</span> <span class="n">CObs</span><span class="p">,</span> <span class="n">Obs</span><span class="p">,</span> <span class="n">_merge_idx</span><span class="p">,</span> <span class="n">_expand_deltas_for_merge</span><span class="p">,</span> <span class="n">_filter_zeroes</span>
|
<span class="kn">from</span> <span class="nn">.obs</span> <span class="kn">import</span> <span class="n">derived_observable</span><span class="p">,</span> <span class="n">CObs</span><span class="p">,</span> <span class="n">Obs</span><span class="p">,</span> <span class="n">_merge_idx</span><span class="p">,</span> <span class="n">_expand_deltas_for_merge</span><span class="p">,</span> <span class="n">_filter_zeroes</span><span class="p">,</span> <span class="n">import_jackknife</span>
|
||||||
|
|
||||||
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">partial</span>
|
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">partial</span>
|
||||||
<span class="kn">from</span> <span class="nn">autograd.extend</span> <span class="kn">import</span> <span class="n">defvjp</span>
|
<span class="kn">from</span> <span class="nn">autograd.extend</span> <span class="kn">import</span> <span class="n">defvjp</span>
|
||||||
|
@ -222,8 +225,13 @@
|
||||||
<span class="k">def</span> <span class="nf">matmul</span><span class="p">(</span><span class="o">*</span><span class="n">operands</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">matmul</span><span class="p">(</span><span class="o">*</span><span class="n">operands</span><span class="p">):</span>
|
||||||
<span class="sd">"""Matrix multiply all operands.</span>
|
<span class="sd">"""Matrix multiply all operands.</span>
|
||||||
|
|
||||||
<span class="sd"> Supports real and complex valued matrices and is faster compared to</span>
|
<span class="sd"> Parameters</span>
|
||||||
<span class="sd"> standard multiplication via the @ operator.</span>
|
<span class="sd"> ----------</span>
|
||||||
|
<span class="sd"> operands : numpy.ndarray</span>
|
||||||
|
<span class="sd"> Arbitrary number of 2d-numpy arrays which can be real or complex</span>
|
||||||
|
<span class="sd"> Obs valued.</span>
|
||||||
|
|
||||||
|
<span class="sd"> This implementation is faster compared to standard multiplication via the @ operator.</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">operands</span><span class="p">):</span>
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">operands</span><span class="p">):</span>
|
||||||
<span class="n">extended_operands</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">extended_operands</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
@ -270,6 +278,56 @@
|
||||||
<span class="k">return</span> <span class="n">derived_array</span><span class="p">(</span><span class="n">multi_dot</span><span class="p">,</span> <span class="n">operands</span><span class="p">)</span>
|
<span class="k">return</span> <span class="n">derived_array</span><span class="p">(</span><span class="n">multi_dot</span><span class="p">,</span> <span class="n">operands</span><span class="p">)</span>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">jack_matmul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Matrix multiply both operands making use of the jackknife approximation.</span>
|
||||||
|
|
||||||
|
<span class="sd"> Parameters</span>
|
||||||
|
<span class="sd"> ----------</span>
|
||||||
|
<span class="sd"> a : numpy.ndarray</span>
|
||||||
|
<span class="sd"> First matrix, can be real or complex Obs valued</span>
|
||||||
|
<span class="sd"> b : numpy.ndarray</span>
|
||||||
|
<span class="sd"> Second matrix, can be real or complex Obs valued</span>
|
||||||
|
|
||||||
|
<span class="sd"> For large matrices this is considerably faster compared to matmul.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="p">[</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">]):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">_exp_to_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">real</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="n">j</span> <span class="o">*</span> <span class="n">entry</span><span class="o">.</span><span class="n">imag</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_imp_from_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">CObs</span><span class="p">(</span><span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">name</span><span class="p">),</span>
|
||||||
|
<span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="n">j_a</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||||
|
<span class="n">j_b</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">j_a</span> <span class="o">@</span> <span class="n">j_b</span>
|
||||||
|
<span class="k">return</span> <span class="n">_imp_from_jack</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">ravel</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">real</span><span class="o">.</span><span class="n">names</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">def</span> <span class="nf">_exp_to_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_imp_from_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="n">j_a</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||||
|
<span class="n">j_b</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">j_a</span> <span class="o">@</span> <span class="n">j_b</span>
|
||||||
|
<span class="k">return</span> <span class="n">_imp_from_jack</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">ravel</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">names</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
|
||||||
|
|
||||||
<span class="k">def</span> <span class="nf">inv</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
<span class="k">def</span> <span class="nf">inv</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||||
<span class="sd">"""Inverse of Obs or CObs valued matrices."""</span>
|
<span class="sd">"""Inverse of Obs or CObs valued matrices."""</span>
|
||||||
<span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
<span class="k">return</span> <span class="n">_mat_mat_op</span><span class="p">(</span><span class="n">anp</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||||
|
@ -810,8 +868,13 @@ not be intercepted.</li>
|
||||||
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">matmul</span><span class="p">(</span><span class="o">*</span><span class="n">operands</span><span class="p">):</span>
|
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">matmul</span><span class="p">(</span><span class="o">*</span><span class="n">operands</span><span class="p">):</span>
|
||||||
<span class="sd">"""Matrix multiply all operands.</span>
|
<span class="sd">"""Matrix multiply all operands.</span>
|
||||||
|
|
||||||
<span class="sd"> Supports real and complex valued matrices and is faster compared to</span>
|
<span class="sd"> Parameters</span>
|
||||||
<span class="sd"> standard multiplication via the @ operator.</span>
|
<span class="sd"> ----------</span>
|
||||||
|
<span class="sd"> operands : numpy.ndarray</span>
|
||||||
|
<span class="sd"> Arbitrary number of 2d-numpy arrays which can be real or complex</span>
|
||||||
|
<span class="sd"> Obs valued.</span>
|
||||||
|
|
||||||
|
<span class="sd"> This implementation is faster compared to standard multiplication via the @ operator.</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">operands</span><span class="p">):</span>
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">operands</span><span class="p">):</span>
|
||||||
<span class="n">extended_operands</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">extended_operands</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
@ -862,8 +925,91 @@ not be intercepted.</li>
|
||||||
|
|
||||||
<div class="docstring"><p>Matrix multiply all operands.</p>
|
<div class="docstring"><p>Matrix multiply all operands.</p>
|
||||||
|
|
||||||
<p>Supports real and complex valued matrices and is faster compared to
|
<h6 id="parameters">Parameters</h6>
|
||||||
standard multiplication via the @ operator.</p>
|
|
||||||
|
<ul>
|
||||||
|
<li><strong>operands</strong> (numpy.ndarray):
|
||||||
|
Arbitrary number of 2d-numpy arrays which can be real or complex
|
||||||
|
Obs valued.</li>
|
||||||
|
<li><strong>This implementation is faster compared to standard multiplication via the @ operator.</strong></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section id="jack_matmul">
|
||||||
|
<div class="attr function"><a class="headerlink" href="#jack_matmul">#  </a>
|
||||||
|
|
||||||
|
|
||||||
|
<span class="def">def</span>
|
||||||
|
<span class="name">jack_matmul</span><span class="signature">(a, b)</span>:
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>View Source</summary>
|
||||||
|
<div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">jack_matmul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
||||||
|
<span class="sd">"""Matrix multiply both operands making use of the jackknife approximation.</span>
|
||||||
|
|
||||||
|
<span class="sd"> Parameters</span>
|
||||||
|
<span class="sd"> ----------</span>
|
||||||
|
<span class="sd"> a : numpy.ndarray</span>
|
||||||
|
<span class="sd"> First matrix, can be real or complex Obs valued</span>
|
||||||
|
<span class="sd"> b : numpy.ndarray</span>
|
||||||
|
<span class="sd"> Second matrix, can be real or complex Obs valued</span>
|
||||||
|
|
||||||
|
<span class="sd"> For large matrices this is considerably faster compared to matmul.</span>
|
||||||
|
<span class="sd"> """</span>
|
||||||
|
|
||||||
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">CObs</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="p">[</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">]):</span>
|
||||||
|
<span class="k">def</span> <span class="nf">_exp_to_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">real</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="n">j</span> <span class="o">*</span> <span class="n">entry</span><span class="o">.</span><span class="n">imag</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_imp_from_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">CObs</span><span class="p">(</span><span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">real</span><span class="p">,</span> <span class="n">name</span><span class="p">),</span>
|
||||||
|
<span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">imag</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="n">j_a</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||||
|
<span class="n">j_b</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">j_a</span> <span class="o">@</span> <span class="n">j_b</span>
|
||||||
|
<span class="k">return</span> <span class="n">_imp_from_jack</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">ravel</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">real</span><span class="o">.</span><span class="n">names</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
<span class="k">else</span><span class="p">:</span>
|
||||||
|
<span class="k">def</span> <span class="nf">_exp_to_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">export_jackknife</span><span class="p">()</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">_imp_from_jack</span><span class="p">(</span><span class="n">matrix</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">matrix</span><span class="p">)</span>
|
||||||
|
<span class="k">for</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">),</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">ndenumerate</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||||
|
<span class="n">base_matrix</span><span class="p">[</span><span class="n">n</span><span class="p">,</span> <span class="n">m</span><span class="p">]</span> <span class="o">=</span> <span class="n">import_jackknife</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||||
|
<span class="k">return</span> <span class="n">base_matrix</span>
|
||||||
|
|
||||||
|
<span class="n">j_a</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||||
|
<span class="n">j_b</span> <span class="o">=</span> <span class="n">_exp_to_jack</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
|
||||||
|
<span class="n">r</span> <span class="o">=</span> <span class="n">j_a</span> <span class="o">@</span> <span class="n">j_b</span>
|
||||||
|
<span class="k">return</span> <span class="n">_imp_from_jack</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">a</span><span class="o">.</span><span class="n">ravel</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">names</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||||
|
</pre></div>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<div class="docstring"><p>Matrix multiply both operands making use of the jackknife approximation.</p>
|
||||||
|
|
||||||
|
<h6 id="parameters">Parameters</h6>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><strong>a</strong> (numpy.ndarray):
|
||||||
|
First matrix, can be real or complex Obs valued</li>
|
||||||
|
<li><strong>b</strong> (numpy.ndarray):
|
||||||
|
Second matrix, can be real or complex Obs valued</li>
|
||||||
|
<li><strong>For large matrices this is considerably faster compared to matmul.</strong></li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue