|
55 | 55 |
|
56 | 56 | <body> |
57 | 57 | <header> |
58 | | - <aside>December 14, 2024</aside> |
| 58 | + <aside>December 16, 2024</aside> |
59 | 59 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a> |
60 | 60 | </header> |
61 | 61 |
|
|
701 | 701 | <li><strong>Directory of the file that is passed to python command serves as a root of local imports.</strong></li> |
702 | 702 | <li><strong>For relative imports use <code class="python hljs"><span class="hljs-string">'from .[…][<pkg/module>[.…]] import <obj>'</span></code>.</strong></li> |
703 | 703 | </ul> |
704 | | -<div><h2 id="closure"><a href="#closure" name="closure">#</a>Closure</h2><p><strong>We have/get a closure in Python when a nested function references a value of its enclosing function and then the enclosing function returns the nested function.</strong></p><pre><code class="python language-python hljs"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_multiplier</span><span class="hljs-params">(a)</span>:</span> |
| 704 | +<div><h2 id="closure"><a href="#closure" name="closure">#</a>Closure</h2><p><strong>We have/get a closure in Python when a nested function references a value of its enclosing function and then the enclosing function returns its nested function.</strong></p><pre><code class="python language-python hljs"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_multiplier</span><span class="hljs-params">(a)</span>:</span> |
705 | 705 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">out</span><span class="hljs-params">(b)</span>:</span> |
706 | 706 | <span class="hljs-keyword">return</span> a * b |
707 | 707 | <span class="hljs-keyword">return</span> out |
@@ -2216,39 +2216,41 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment |
2216 | 2216 | <li><strong><code class="python hljs"><span class="hljs-string">'ix_([1, 2], [3, 4])'</span></code> returns <code class="python hljs"><span class="hljs-string">'[[1], [2]]'</span></code> and <code class="python hljs"><span class="hljs-string">'[[3, 4]]'</span></code>. Due to broadcasting rules, this is the same as using <code class="python hljs"><span class="hljs-string">'[[1, 1], [2, 2]]'</span></code> and <code class="python hljs"><span class="hljs-string">'[[3, 4], [3, 4]]'</span></code>.</strong></li> |
2217 | 2217 | <li><strong>Any value that is broadcastable to the indexed shape can be assigned to the selection.</strong></li> |
2218 | 2218 | </ul> |
2219 | | -<div><h3 id="broadcasting">Broadcasting</h3><p><strong>A set of rules by which NumPy functions operate on arrays of different shapes.</strong></p><pre><code class="python language-python hljs">left = [ <span class="hljs-number">0.1</span> , <span class="hljs-number">0.6</span> , <span class="hljs-number">0.8</span> ] <span class="hljs-comment"># Shape: (3,)</span> |
2220 | | -right = [[<span class="hljs-number">0.1</span>], [<span class="hljs-number">0.6</span>], [<span class="hljs-number">0.8</span>]] <span class="hljs-comment"># Shape: (3, 1)</span> |
| 2219 | +<div><h3 id="broadcasting">Broadcasting</h3><p><strong>A set of rules by which NumPy functions operate on arrays of different shapes.</strong></p><pre><code class="python language-python hljs">left = np.array([ <span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span> ]) <span class="hljs-comment"># `left.shape == (3,)`</span> |
| 2220 | +right = np.array([[<span class="hljs-number">0.1</span>],[<span class="hljs-number">0.6</span>],[<span class="hljs-number">0.8</span>]]) <span class="hljs-comment"># `right.shape == (3, 1)`</span> |
2221 | 2221 | </code></pre></div> |
2222 | 2222 |
|
2223 | 2223 |
|
2224 | | -<div><h4 id="1ifarrayshapesdifferinlengthleftpadtheshortershapewithones">1. If array shapes differ in length, left-pad the shorter shape with ones:</h4><pre><code class="python language-python hljs">left = [[<span class="hljs-number">0.1</span> , <span class="hljs-number">0.6</span> , <span class="hljs-number">0.8</span>]] <span class="hljs-comment"># Shape: (1, 3) <- !</span> |
2225 | | -right = [[<span class="hljs-number">0.1</span>], [<span class="hljs-number">0.6</span>], [<span class="hljs-number">0.8</span>]] <span class="hljs-comment"># Shape: (3, 1)</span> |
| 2224 | +<div><h4 id="1ifarrayshapesdifferinlengthleftpadtheshortershapewithones">1. If array shapes differ in length, left-pad the shorter shape with ones:</h4><pre><code class="python language-python hljs">left = np.array([[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]]) <span class="hljs-comment"># `left.shape == (1, 3)`</span> |
| 2225 | +right = np.array([[<span class="hljs-number">0.1</span>],[<span class="hljs-number">0.6</span>],[<span class="hljs-number">0.8</span>]]) <span class="hljs-comment"># `right.shape == (3, 1)`</span> |
2226 | 2226 | </code></pre></div> |
2227 | 2227 |
|
2228 | | -<div><h4 id="2ifanydimensionsdifferinsizeexpandtheonesthathavesize1byduplicatingtheirelements">2. If any dimensions differ in size, expand the ones that have size 1 by duplicating their elements:</h4><pre><code class="python language-python hljs">left = [[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], <span class="hljs-comment"># Shape: (3, 3) <- !</span> |
2229 | | - [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], |
2230 | | - [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]] |
| 2228 | +<div><h4 id="2ifanydimensionsdifferinsizeexpandtheonesthathavesize1byduplicatingtheirelements">2. If any dimensions differ in size, expand the ones that have size 1 by duplicating their elements:</h4><pre><code class="python language-python hljs">left = np.array([[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], <span class="hljs-comment"># `left.shape == (3, 3)`</span> |
| 2229 | + [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>], |
| 2230 | + [<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]]) |
| 2231 | + |
| 2232 | +right = np.array([[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>], <span class="hljs-comment"># `right.shape == (3, 3)`</span> |
| 2233 | + [<span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>], |
| 2234 | + [<span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>]]) |
2231 | 2235 | </code></pre></div> |
2232 | 2236 |
|
2233 | | -<pre><code class="python language-python hljs">right = [[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>, <span class="hljs-number">0.1</span>], <span class="hljs-comment"># Shape: (3, 3) <- !</span> |
2234 | | - [<span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>], |
2235 | | - [<span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>]] |
2236 | | -</code></pre> |
2237 | | -<div><h3 id="example-3">Example</h3><div><h4 id="foreachpointreturnsindexofitsnearestpoint010608121">For each point returns index of its nearest point (<code class="python hljs">[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>] => [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>]</code>):</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>points = np.array([<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]) |
2238 | | -[ <span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span> ] |
2239 | | -<span class="hljs-meta">>>> </span>wrapped_points = points.reshape(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>) |
2240 | | -[[<span class="hljs-number">0.1</span>], [<span class="hljs-number">0.6</span>], [<span class="hljs-number">0.8</span>]] |
2241 | | -<span class="hljs-meta">>>> </span>deltas = points - wrapped_points |
2242 | | -[[ <span class="hljs-number">0.</span> , <span class="hljs-number">0.5</span>, <span class="hljs-number">0.7</span>], |
2243 | | - [<span class="hljs-number">-0.5</span>, <span class="hljs-number">0.</span> , <span class="hljs-number">0.2</span>], |
2244 | | - [<span class="hljs-number">-0.7</span>, <span class="hljs-number">-0.2</span>, <span class="hljs-number">0.</span> ]] |
2245 | | -<span class="hljs-meta">>>> </span>distances = np.abs(deltas) |
2246 | | -<span class="hljs-meta">>>> </span>distances[range(<span class="hljs-number">3</span>), range(<span class="hljs-number">3</span>)] = np.inf |
2247 | | -[[ inf, <span class="hljs-number">0.5</span>, <span class="hljs-number">0.7</span>], |
2248 | | - [ <span class="hljs-number">0.5</span>, inf, <span class="hljs-number">0.2</span>], |
2249 | | - [ <span class="hljs-number">0.7</span>, <span class="hljs-number">0.2</span>, inf]] |
2250 | | -<span class="hljs-meta">>>> </span>distances.argmin(<span class="hljs-number">1</span>) |
2251 | | -[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>] |
| 2237 | +<div><h3 id="example-3">Example</h3><div><h4 id="foreachpointreturnsindexofitsnearestpoint010608121">For each point returns index of its nearest point (<code class="python hljs">[<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>] => [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>]</code>):</h4><pre><code class="python language-python hljs"><span class="hljs-meta">>>> </span>print(points := np.array([<span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>])) |
| 2238 | +[<span class="hljs-number">0.1</span> <span class="hljs-number">0.6</span> <span class="hljs-number">0.8</span>] |
| 2239 | +<span class="hljs-meta">>>> </span>print(wrapped_points := points.reshape(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>)) |
| 2240 | +[[<span class="hljs-number">0.1</span>] |
| 2241 | + [<span class="hljs-number">0.6</span>] |
| 2242 | + [<span class="hljs-number">0.8</span>]] |
| 2243 | +<span class="hljs-meta">>>> </span>print(deltas := points - wrapped_points) |
| 2244 | +[[ <span class="hljs-number">0.</span> <span class="hljs-number">0.5</span> <span class="hljs-number">0.7</span>] |
| 2245 | + [<span class="hljs-number">-0.5</span> <span class="hljs-number">0.</span> <span class="hljs-number">0.2</span>] |
| 2246 | + [<span class="hljs-number">-0.7</span> <span class="hljs-number">-0.2</span> <span class="hljs-number">0.</span> ]] |
| 2247 | +<span class="hljs-meta">>>> </span>deltas[range(<span class="hljs-number">3</span>), range(<span class="hljs-number">3</span>)] = np.inf |
| 2248 | +<span class="hljs-meta">>>> </span>print(distances := np.abs(deltas)) |
| 2249 | +[[inf <span class="hljs-number">0.5</span> <span class="hljs-number">0.7</span>] |
| 2250 | + [<span class="hljs-number">0.5</span> inf <span class="hljs-number">0.2</span>] |
| 2251 | + [<span class="hljs-number">0.7</span> <span class="hljs-number">0.2</span> inf]] |
| 2252 | +<span class="hljs-meta">>>> </span>print(distances.argmin(axis=<span class="hljs-number">1</span>)) |
| 2253 | +[<span class="hljs-number">1</span> <span class="hljs-number">2</span> <span class="hljs-number">1</span>] |
2252 | 2254 | </code></pre></div></div> |
2253 | 2255 |
|
2254 | 2256 |
|
@@ -2922,7 +2924,7 @@ <h3 id="format-2">Format</h3><div><h4 id="forstandardtypesizesandmanualalignment |
2922 | 2924 |
|
2923 | 2925 |
|
2924 | 2926 | <footer> |
2925 | | - <aside>December 14, 2024</aside> |
| 2927 | + <aside>December 16, 2024</aside> |
2926 | 2928 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a> |
2927 | 2929 | </footer> |
2928 | 2930 |
|
|
0 commit comments