Skip to content

Commit 5c5f62c

Browse files
committed
Added Artisan rougier#3 (solved) and rougier#4 (unsolved)
1 parent 8647fc7 commit 5c5f62c

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

README.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,29 @@ <h1>Artisan</h1>
469469
<span class="keyword">print</span> <span class="name">np</span><span class="operator">.</span><span class="name">unpackbits</span><span class="punctuation">(</span><span class="name">I</span><span class="punctuation">[:,</span> <span class="name">np</span><span class="operator">.</span><span class="name">newaxis</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>
470470
</pre>
471471
</li>
472+
<li><p class="first">Consider 2 sets of points P0,P1 describing lines (2d) and a point p, how to
473+
compute distance from p to each line i (P0[i],P1[i]) ?</p>
474+
<pre class="code python literal-block">
475+
<span class="keyword">def</span> <span class="name function">distance</span><span class="punctuation">(</span><span class="name">P0</span><span class="punctuation">,</span> <span class="name">P1</span><span class="punctuation">,</span> <span class="name">p</span><span class="punctuation">):</span>
476+
<span class="name">T</span> <span class="operator">=</span> <span class="name">P1</span> <span class="operator">-</span> <span class="name">P0</span>
477+
<span class="name">L</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">T</span><span class="operator">**</span><span class="literal number integer">2</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>
478+
<span class="name">U</span> <span class="operator">=</span> <span class="operator">-</span><span class="punctuation">((</span><span class="name">P0</span><span class="punctuation">[:,</span><span class="literal number integer">0</span><span class="punctuation">]</span><span class="operator">-</span><span class="name">p</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">])</span><span class="operator">*</span><span class="name">T</span><span class="punctuation">[:,</span><span class="literal number integer">0</span><span class="punctuation">]</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name">P0</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">-</span><span class="name">p</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">])</span><span class="operator">*</span><span class="name">T</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">])</span> <span class="operator">/</span> <span class="name">L</span>
479+
<span class="name">U</span> <span class="operator">=</span> <span class="name">U</span><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">U</span><span class="punctuation">),</span><span class="literal number integer">1</span><span class="punctuation">)</span>
480+
<span class="name">D</span> <span class="operator">=</span> <span class="name">P0</span> <span class="operator">+</span> <span class="name">U</span><span class="operator">*</span><span class="name">T</span> <span class="operator">-</span> <span class="name">p</span>
481+
<span class="keyword">return</span> <span class="name">np</span><span class="operator">.</span><span class="name">sqrt</span><span class="punctuation">((</span><span class="name">D</span><span class="operator">**</span><span class="literal number integer">2</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>
482+
483+
<span class="name">P0</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="operator">-</span><span class="literal number integer">10</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><span class="literal number integer">2</span><span class="punctuation">))</span>
484+
<span class="name">P1</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="operator">-</span><span class="literal number integer">10</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><span class="literal number integer">2</span><span class="punctuation">))</span>
485+
<span class="name">p</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="operator">-</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">10</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>
486+
<span class="keyword">print</span> <span class="name">distance</span><span class="punctuation">(</span><span class="name">P0</span><span class="punctuation">,</span> <span class="name">P1</span><span class="punctuation">,</span> <span class="name">p</span><span class="punctuation">)</span>
487+
</pre>
488+
</li>
489+
<li><p class="first">Consider 2 sets of points P0,P1 describing lines (2d) and a set of point P,
490+
how to compute distance from each point j (P[j]) to each line i (P0[i],P1[i]) ?</p>
491+
<pre class="code python literal-block">
492+
<span class="name">Answer</span> <span class="name">needed</span> <span class="name">actually</span>
493+
</pre>
494+
</li>
472495
</ol>
473496
</div>
474497
<div class="section" id="adept">

README.rst

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,33 @@ Artisan
560560
print np.unpackbits(I[:, np.newaxis], axis=1)
561561
562562
563+
3. Consider 2 sets of points P0,P1 describing lines (2d) and a point p, how to
564+
compute distance from p to each line i (P0[i],P1[i]) ?
565+
566+
.. code-block:: python
567+
568+
def distance(P0, P1, p):
569+
T = P1 - P0
570+
L = (T**2).sum(axis=1)
571+
U = -((P0[:,0]-p[0])*T[:,0] + (P0[:,1]-p[1])*T[:,1]) / L
572+
U = U.reshape(len(U),1)
573+
D = P0 + U*T - p
574+
return np.sqrt((D**2).sum(axis=1))
575+
576+
P0 = np.random.uniform(-10,10,(100,2))
577+
P1 = np.random.uniform(-10,10,(100,2))
578+
p = np.random.uniform(-10,10,( 1,2))
579+
print distance(P0, P1, p)
580+
581+
582+
4. Consider 2 sets of points P0,P1 describing lines (2d) and a set of point P,
583+
how to compute distance from each point j (P[j]) to each line i (P0[i],P1[i]) ?
584+
585+
.. code-block:: python
586+
587+
Answer needed actually
588+
589+
563590
564591
Adept
565592
=====

0 commit comments

Comments
 (0)