diff --git a/README.md b/README.md index cd46070..1637037 100644 --- a/README.md +++ b/README.md @@ -2710,7 +2710,7 @@ import numpy as np <1/2d_arr> = <2d>[<2d/1d_bools>] # 1d_bools must have size of a column. ``` * **`':'` returns a slice of all dimension's indices. Omitted dimensions default to `':'`.** -* **Sixth line fails if tuple is used because Python converts `'obj[i, j]'` to `'obj[(i, j)]'`!** +* **Python converts `'obj[i, j]'` to `'obj[(i, j)]'`. This makes `'<2d>[row_i, col_i]'` and `'<2d>[row_indices]'` indistinguishable to NumPy if tuple of indices is passed!** * **Indexing with a slice and 1d array works the same as when using two slices (lines 4, 6, 7).** * **`'ix_([1, 2], [3, 4])'` returns `'[[1], [2]]'` and `'[[3, 4]]'`. Due to broadcasting rules, this is the same as using `'[[1, 1], [2, 2]]'` and `'[[3, 4], [3, 4]]'`.** * **Any value that is broadcastable to the indexed shape can be assigned to the selection.** @@ -2734,7 +2734,9 @@ right = [[0.1], [0.6], [0.8]] # Shape: (3, 1) left = [[0.1, 0.6, 0.8], # Shape: (3, 3) <- ! [0.1, 0.6, 0.8], [0.1, 0.6, 0.8]] +``` +```python right = [[0.1, 0.1, 0.1], # Shape: (3, 3) <- ! [0.6, 0.6, 0.6], [0.8, 0.8, 0.8]] @@ -2748,14 +2750,11 @@ right = [[0.1, 0.1, 0.1], # Shape: (3, 3) <- ! [ 0.1, 0.6, 0.8 ] >>> wrapped_points = points.reshape(3, 1) [[0.1], [0.6], [0.8]] ->>> distances = points - wrapped_points +>>> deltas = points - wrapped_points [[ 0. , 0.5, 0.7], [-0.5, 0. , 0.2], [-0.7, -0.2, 0. ]] ->>> distances = np.abs(distances) -[[ 0. , 0.5, 0.7], - [ 0.5, 0. , 0.2], - [ 0.7, 0.2, 0. ]] +>>> distances = np.abs(deltas) >>> distances[range(3), range(3)] = np.inf [[ inf, 0.5, 0.7], [ 0.5, inf, 0.2], diff --git a/index.html b/index.html index 40f7a27..da850a3 100644 --- a/index.html +++ b/index.html @@ -55,7 +55,7 @@ <body> <header> - <aside>December 11, 2024</aside> + <aside>December 13, 2024</aside> <a href="https://gto76.github.io" rel="author">Jure Šorn</a> </header> @@ -2211,7 +2211,7 @@ $ snakeviz test.prof <span class="hlj </code></pre> <ul> <li><strong><code class="python hljs"><span class="hljs-string">':'</span></code> returns a slice of all dimension's indices. Omitted dimensions default to <code class="python hljs"><span class="hljs-string">':'</span></code>.</strong></li> -<li><strong>Sixth line fails if tuple is used because Python converts <code class="python hljs"><span class="hljs-string">'obj[i, j]'</span></code> to <code class="python hljs"><span class="hljs-string">'obj[(i, j)]'</span></code>!</strong></li> +<li><strong>Python converts <code class="python hljs"><span class="hljs-string">'obj[i, j]'</span></code> to <code class="python hljs"><span class="hljs-string">'obj[(i, j)]'</span></code>. This makes <code class="python hljs"><span class="hljs-string">'<2d>[row_i, col_i]'</span></code> and <code class="python hljs"><span class="hljs-string">'<2d>[row_indices]'</span></code> indistinguishable to NumPy if tuple of indices is passed!</strong></li> <li><strong>Indexing with a slice and 1d array works the same as when using two slices (lines 4, 6, 7).</strong></li> <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> <li><strong>Any value that is broadcastable to the indexed shape can be assigned to the selection.</strong></li> @@ -2228,24 +2228,21 @@ right = [[<span class="hljs-number">0.1</span>], [<span class="hljs-number">0.6< <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> [<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">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span>]] +</code></pre></div> -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> +<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> [<span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.6</span>], [<span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>, <span class="hljs-number">0.8</span>]] -</code></pre></div> - +</code></pre> <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>]) [ <span class="hljs-number">0.1</span>, <span class="hljs-number">0.6</span>, <span class="hljs-number">0.8</span> ] <span class="hljs-meta">>>> </span>wrapped_points = points.reshape(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>) [[<span class="hljs-number">0.1</span>], [<span class="hljs-number">0.6</span>], [<span class="hljs-number">0.8</span>]] -<span class="hljs-meta">>>> </span>distances = points - wrapped_points +<span class="hljs-meta">>>> </span>deltas = points - wrapped_points [[ <span class="hljs-number">0.</span> , <span class="hljs-number">0.5</span>, <span class="hljs-number">0.7</span>], [<span class="hljs-number">-0.5</span>, <span class="hljs-number">0.</span> , <span class="hljs-number">0.2</span>], [<span class="hljs-number">-0.7</span>, <span class="hljs-number">-0.2</span>, <span class="hljs-number">0.</span> ]] -<span class="hljs-meta">>>> </span>distances = np.abs(distances) -[[ <span class="hljs-number">0.</span> , <span class="hljs-number">0.5</span>, <span class="hljs-number">0.7</span>], - [ <span class="hljs-number">0.5</span>, <span class="hljs-number">0.</span> , <span class="hljs-number">0.2</span>], - [ <span class="hljs-number">0.7</span>, <span class="hljs-number">0.2</span>, <span class="hljs-number">0.</span> ]] +<span class="hljs-meta">>>> </span>distances = np.abs(deltas) <span class="hljs-meta">>>> </span>distances[range(<span class="hljs-number">3</span>), range(<span class="hljs-number">3</span>)] = np.inf [[ inf, <span class="hljs-number">0.5</span>, <span class="hljs-number">0.7</span>], [ <span class="hljs-number">0.5</span>, inf, <span class="hljs-number">0.2</span>], @@ -2925,7 +2922,7 @@ $ deactivate <span class="hljs-comment"># Deactivates the active <footer> - <aside>December 11, 2024</aside> + <aside>December 13, 2024</aside> <a href="https://gto76.github.io" rel="author">Jure Šorn</a> </footer>