Added new exercice (How to get the diagonal of a dot product)
This commit is contained in:
parent
61f0bcc00b
commit
ba2b2b0f9b
16
README.html
16
README.html
@ -348,6 +348,22 @@ using a vector S of same size describing subset indices ?</p>
|
||||
<span class="name">D_counts</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">bincount</span><span class="punctuation">(</span><span class="name">S</span><span class="punctuation">)</span>
|
||||
<span class="name">D_means</span> <span class="operator">=</span> <span class="name">D_sums</span> <span class="operator">/</span> <span class="name">D_counts</span>
|
||||
<span class="keyword">print</span> <span class="name">D_means</span>
|
||||
|
||||
<span class="name">I</span> <span class="name">often</span> <span class="name">need</span> <span class="name">to</span> <span class="name">compute</span> <span class="name">the</span> <span class="name">equivalent</span> <span class="name">of</span>
|
||||
</pre>
|
||||
</li>
|
||||
<li><p class="first">How to get the diagonal of a dot product ?</p>
|
||||
<pre class="code python literal-block">
|
||||
<span class="comment"># Author: Mathieu Blondel</span>
|
||||
|
||||
<span class="comment"># Slow version</span>
|
||||
<span class="name">np</span><span class="operator">.</span><span class="name">diag</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">dot</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">))</span>
|
||||
|
||||
<span class="comment"># Fast version</span>
|
||||
<span class="name">np</span><span class="operator">.</span><span class="name">sum</span><span class="punctuation">(</span><span class="name">A</span> <span class="operator">*</span> <span class="name">B</span><span class="operator">.</span><span class="name">T</span><span class="punctuation">,</span> <span class="name">axis</span><span class="operator">=</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
||||
|
||||
<span class="comment"># Faster version</span>
|
||||
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string">"ij,ji->i"</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">)</span><span class="operator">.</span>
|
||||
</pre>
|
||||
</li>
|
||||
<li><p class="first">Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
|
||||
|
17
README.rst
17
README.rst
@ -417,6 +417,23 @@ Thanks to Michiaki Ariga, there is now a
|
||||
D_means = D_sums / D_counts
|
||||
print D_means
|
||||
|
||||
I often need to compute the equivalent of
|
||||
|
||||
#. How to get the diagonal of a dot product ?
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Author: Mathieu Blondel
|
||||
|
||||
# Slow version
|
||||
np.diag(np.dot(A, B))
|
||||
|
||||
# Fast version
|
||||
np.sum(A * B.T, axis=1)
|
||||
|
||||
# Faster version
|
||||
np.einsum("ij,ji->i", A, B).
|
||||
|
||||
|
||||
#. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
|
||||
consecutive zeros interleaved between each value ?
|
||||
|
Loading…
Reference in New Issue
Block a user