Skip to content

Commit e7685de

Browse files
committed
Updated html
1 parent b9ceff4 commit e7685de

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

README.html

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ <h1><a class="toc-backref" href="#id2">Novice</a></h1>
172172
<div class="section" id="apprentice">
173173
<h1><a class="toc-backref" href="#id3">Apprentice</a></h1>
174174
<ol class="arabic">
175-
<li><p class="first">Make an array immutable</p>
175+
<li><p class="first">Make an array immutable (read-only)</p>
176176
<pre class="code python literal-block">
177177
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">zeros</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">)</span>
178178
<span class="name">Z</span><span class="operator">.</span><span class="name">flags</span><span class="operator">.</span><span class="name">writeable</span> <span class="operator">=</span> <span class="name builtin pseudo">False</span>
@@ -321,6 +321,18 @@ <h1><a class="toc-backref" href="#id4">Journeyman</a></h1>
321321
<span class="name builtin">sum</span> <span class="operator">=</span> <span class="name">A</span><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="name">A</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[:</span><span class="operator">-</span><span class="literal number integer">2</span><span class="punctuation">]</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">,))</span><span class="operator">.</span><span class="name">sum</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>
322322
</pre>
323323
</li>
324+
<li><p class="first">Considering a one-dimensional vector D, how to compute means of subsets of D
325+
using a vector S of same size describing subset indices ?</p>
326+
<pre class="code python literal-block">
327+
<span class="comment"># Jaime Fernández del Río</span>
328+
329+
<span class="name">D</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">random</span><span class="operator">.</span><span class="name">uniform</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">100</span><span class="punctuation">)</span>
330+
<span class="name">S</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">random</span><span class="operator">.</span><span class="name">randint</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">100</span><span class="punctuation">)</span>
331+
<span class="name">D_sums</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">weights</span><span class="operator">=</span><span class="name">D</span><span class="punctuation">)</span>
332+
<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>
333+
<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>
334+
</pre>
335+
</li>
324336
</ol>
325337
</div>
326338
<div class="section" id="craftsman">
@@ -354,6 +366,15 @@ <h1><a class="toc-backref" href="#id5">Craftsman</a></h1>
354366
<span class="name">G</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">unique</span><span class="punctuation">(</span><span class="name">G</span><span class="punctuation">)</span>
355367
</pre>
356368
</li>
369+
<li><p class="first">Given an array C that is a bincount, how to produce an array A such that
370+
np.bincount(A) == C ?</p>
371+
<pre class="code python literal-block">
372+
<span class="comment"># Jaime Fernández del Río</span>
373+
374+
<span class="name">C</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="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="literal number integer">6</span><span class="punctuation">])</span>
375+
<span class="name">A</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">repeat</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">arange</span><span class="punctuation">(</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">C</span><span class="punctuation">)),</span> <span class="name">C</span><span class="punctuation">)</span>
376+
</pre>
377+
</li>
357378
</ol>
358379
</div>
359380
<div class="section" id="artisan">
@@ -445,6 +466,24 @@ <h1><a class="toc-backref" href="#id8">Expert</a></h1>
445466
<span class="name">C</span> <span class="operator">=</span> <span class="name">stride_tricks</span><span class="operator">.</span><span class="name">as_strided</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">,</span> <span class="name">shape</span><span class="operator">=</span><span class="punctuation">(</span><span class="name">i</span><span class="punctuation">,</span> <span class="name">j</span><span class="punctuation">,</span> <span class="name">n</span><span class="punctuation">,</span> <span class="name">n</span><span class="punctuation">),</span> <span class="name">strides</span><span class="operator">=</span><span class="name">Z</span><span class="operator">.</span><span class="name">strides</span> <span class="operator">+</span> <span class="name">Z</span><span class="operator">.</span><span class="name">strides</span><span class="punctuation">)</span>
446467
</pre>
447468
</li>
469+
<li><p class="first">Create a 2D array subclass such that Z[i,j] == Z[j,i]</p>
470+
<pre class="code python literal-block">
471+
<span class="comment"># Eric O. Lebigot</span>
472+
<span class="comment"># Note: only works for 2d array and value setting using indices</span>
473+
474+
<span class="keyword">class</span> <span class="name class">Symetric</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">ndarray</span><span class="punctuation">):</span>
475+
<span class="keyword">def</span> <span class="name function">__setitem__</span><span class="punctuation">(</span><span class="name builtin pseudo">self</span><span class="punctuation">,</span> <span class="punctuation">(</span><span class="name">i</span><span class="punctuation">,</span><span class="name">j</span><span class="punctuation">),</span> <span class="name">value</span><span class="punctuation">):</span>
476+
<span class="name builtin">super</span><span class="punctuation">(</span><span class="name">Symetric</span><span class="punctuation">,</span> <span class="name builtin pseudo">self</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">__setitem__</span><span class="punctuation">((</span><span class="name">i</span><span class="punctuation">,</span><span class="name">j</span><span class="punctuation">),</span> <span class="name">value</span><span class="punctuation">)</span>
477+
<span class="name builtin">super</span><span class="punctuation">(</span><span class="name">Symetric</span><span class="punctuation">,</span> <span class="name builtin pseudo">self</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">__setitem__</span><span class="punctuation">((</span><span class="name">j</span><span class="punctuation">,</span><span class="name">i</span><span class="punctuation">),</span> <span class="name">value</span><span class="punctuation">)</span>
478+
479+
<span class="keyword">def</span> <span class="name function">symetric</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">):</span>
480+
<span class="keyword">return</span> <span class="name">np</span><span class="operator">.</span><span class="name">asarray</span><span class="punctuation">(</span><span class="name">Z</span> <span class="operator">+</span> <span class="name">Z</span><span class="operator">.</span><span class="name">T</span> <span class="operator">-</span> <span class="name">np</span><span class="operator">.</span><span class="name">diag</span><span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">diagonal</span><span class="punctuation">()))</span><span class="operator">.</span><span class="name">view</span><span class="punctuation">(</span><span class="name">Symetric</span><span class="punctuation">)</span>
481+
482+
<span class="name">S</span> <span class="operator">=</span> <span class="name">symetric</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">random</span><span class="operator">.</span><span class="name">randint</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">,(</span><span class="literal number integer">5</span><span class="punctuation">,</span><span class="literal number integer">5</span><span class="punctuation">))</span>
483+
<span class="name">S</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">42</span>
484+
<span class="keyword">print</span> <span class="name">S</span>
485+
</pre>
486+
</li>
448487
</ol>
449488
</div>
450489
<div class="section" id="master">

0 commit comments

Comments
 (0)