← numpy-100

Added exercises

8647fc74fd35e8d2bead5a5a76c7f2129cf450ac · Nicolas Rougier · Jun 23, 2014 09:32

+143 −24 · 3 files changed

  • README.html +34 −8
  • README.ipynb +68 −7
  • README.rst +41 −9
diff --git a/README.html b/README.html
index ec1eb4c..0d6dd88 100644
--- a/README.html
+++ b/README.html
@@ -34,7 +34,8 @@ is:</p>
 <p>Repository is at: <a class="reference external" href="https://github.com/rougier/numpy-100">https://github.com/rougier/numpy-100</a></p>
 <p>The corresponding <a class="reference external" href="https://github.com/rougier/numpy-100/blob/master/README.ipynb">IPython notebook</a> is available
 from the github repo, thanks to the <a class="reference external" href="https://github.com/esc/rst2ipynb">rst2ipynb</a> conversion tool by <a class="reference external" href="http://haenel.co">Valentin Haenel</a></p>
-<p>Thanks to Michiaki Ariga, there is now a <a class="reference external" href="https://github.com/chezou/julia-100-exercises">Julia version</a>.</p>
+<p>Thanks to Michiaki Ariga, there is now a
+<a class="reference external" href="https://github.com/chezou/julia-100-exercises">Julia version</a>.</p>
 <div class="section" id="neophyte">
 <h1>Neophyte</h1>
 <ol class="arabic">
@@ -257,16 +258,12 @@ point by point distances</p>
 <span class="keyword">print</span> <span class="name">G</span>
 </pre>
 </li>
-<li><p class="first">Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
-consecutive zeros interleaved between each value ?</p>
+<li><p class="first">How to tell if a given 2D array has null columns ?</p>
 <pre class="code python literal-block">
 <span class="comment"># Author: Warren Weckesser</span>
 
-<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">array</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">5</span><span class="punctuation">])</span>
-<span class="name">nz</span> <span class="operator">=</span> <span class="literal number integer">3</span>
-<span class="name">Z0</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="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</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="punctuation">(</span><span class="name">nz</span><span class="punctuation">))</span>
-<span class="name">Z0</span><span class="punctuation">[::</span><span class="name">nz</span><span class="operator">+</span><span class="literal number integer">1</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">Z</span>
-<span class="keyword">print</span> <span class="name">Z0</span>
+<span class="name">Z</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">3</span><span class="punctuation">,(</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">))</span>
+<span class="keyword">print</span> <span class="punctuation">(</span><span class="operator">~</span><span class="name">Z</span><span class="operator">.</span><span class="name">any</span><span class="punctuation">(</span><span class="name">axis</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">any</span><span class="punctuation">()</span>
 </pre>
 </li>
 <li><p class="first">Find the nearest value from a given value in an array</p>
@@ -357,6 +354,35 @@ using a vector S of same size describing subset indices ?</p>
 <span class="keyword">print</span> <span class="name">D_means</span>
 </pre>
 </li>
+<li><p class="first">Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
+consecutive zeros interleaved between each value ?</p>
+<pre class="code python literal-block">
+<span class="comment"># Author: Warren Weckesser</span>
+
+<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">array</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">5</span><span class="punctuation">])</span>
+<span class="name">nz</span> <span class="operator">=</span> <span class="literal number integer">3</span>
+<span class="name">Z0</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="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</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="punctuation">(</span><span class="name">nz</span><span class="punctuation">))</span>
+<span class="name">Z0</span><span class="punctuation">[::</span><span class="name">nz</span><span class="operator">+</span><span class="literal number integer">1</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">Z</span>
+<span class="keyword">print</span> <span class="name">Z0</span>
+</pre>
+</li>
+<li><p class="first">Consider an array of dimension (5,5,3), how to mulitply it by an array with
+dimensions (5,5) ?</p>
+<pre class="code python literal-block">
+<span class="name">A</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">ones</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><span class="literal number integer">3</span><span class="punctuation">))</span>
+<span class="name">B</span> <span class="operator">=</span> <span class="literal number integer">2</span><span class="operator">*</span><span class="name">np</span><span class="operator">.</span><span class="name">ones</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>
+<span class="keyword">print</span> <span class="name">A</span> <span class="operator">*</span> <span class="name">B</span><span class="punctuation">[:,:,</span><span class="name builtin pseudo">None</span><span class="punctuation">]</span>
+</pre>
+</li>
+<li><p class="first">How to swap two rows of an array ?</p>
+<pre class="code python literal-block">
+<span class="comment"># Author: Eelco Hoogendoorn</span>
+
+<span class="name">A</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">arange</span><span class="punctuation">(</span><span class="literal number integer">25</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">reshape</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>
+<span class="name">A</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="operator">=</span> <span class="name">A</span><span class="punctuation">[[</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">]]</span>
+<span class="keyword">print</span> <span class="name">A</span>
+</pre>
+</li>
 </ol>
 </div>
 <div class="section" id="craftsman">
diff --git a/README.ipynb b/README.ipynb
index 061f47a..f4ffe6f 100644
--- a/README.ipynb
+++ b/README.ipynb
@@ -662,8 +662,7 @@
      "cell_type": "markdown",
      "metadata": {},
      "source": [
-      "Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3\n",
-      "consecutive zeros interleaved between each value ?\n"
+      "How to tell if a given 2D array has null columns ?\n"
      ]
     },
     {
@@ -672,11 +671,8 @@
      "input": [
       "# Author: Warren Weckesser\n",
       "\n",
-      "Z = np.array([1,2,3,4,5])\n",
-      "nz = 3\n",
-      "Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))\n",
-      "Z0[::nz+1] = Z\n",
-      "print Z0"
+      "Z = np.random.randint(0,3,(3,10))\n",
+      "print (~Z.any(axis=0)).any()"
      ],
      "language": "python",
      "metadata": {},
@@ -880,6 +876,71 @@
      "metadata": {},
      "outputs": []
     },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3\n",
+      "consecutive zeros interleaved between each value ?\n"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Author: Warren Weckesser\n",
+      "\n",
+      "Z = np.array([1,2,3,4,5])\n",
+      "nz = 3\n",
+      "Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))\n",
+      "Z0[::nz+1] = Z\n",
+      "print Z0"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Consider an array of dimension (5,5,3), how to mulitply it by an array\n",
+      "with dimensions (5,5) ?\n"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "A = np.ones((5,5,3))\n",
+      "B = 2*np.ones((5,5))\n",
+      "print A * B[:,:,None]"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "How to swap two rows of an array ?\n"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Author: Eelco Hoogendoorn\n",
+      "\n",
+      "A = np.arange(25).reshape(5,5)\n",
+      "A[[0,1]] = A[[1,0]]\n",
+      "print A"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
+    },
     {
      "cell_type": "heading",
      "level": 2,
diff --git a/README.rst b/README.rst
index f063b9c..2cf4ad3 100644
--- a/README.rst
+++ b/README.rst
@@ -34,7 +34,8 @@ from the github repo, thanks to the `rst2ipynb
 <https://github.com/esc/rst2ipynb>`_ conversion tool by `Valentin Haenel
 <http://haenel.co>`_
 
-Thanks to Michiaki Ariga, there is now a `Julia version <https://github.com/chezou/julia-100-exercises>`_.
+Thanks to Michiaki Ariga, there is now a
+`Julia version <https://github.com/chezou/julia-100-exercises>`_.
 
 
 .. **Contents**
@@ -319,19 +320,14 @@ Apprentice
       print G
 
 
-9. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
-   consecutive zeros interleaved between each value ?
+9. How to tell if a given 2D array has null columns ?
 
    .. code-block:: python
 
       # Author: Warren Weckesser
 
-      Z = np.array([1,2,3,4,5])
-      nz = 3
-      Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))
-      Z0[::nz+1] = Z
-      print Z0
-
+      Z = np.random.randint(0,3,(3,10))
+      print (~Z.any(axis=0)).any()
 
 10. Find the nearest value from a given value in an array
 
@@ -410,6 +406,7 @@ Journeyman
       n = len(np.unique(F))
       print np.unique(I)
 
+
 6. Considering a four dimensions array, how to get sum over the last two axis at once ?
 
    .. code-block:: python
@@ -435,6 +432,41 @@ Journeyman
       print D_means
 
 
+8. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3
+   consecutive zeros interleaved between each value ?
+
+   .. code-block:: python
+
+      # Author: Warren Weckesser
+
+      Z = np.array([1,2,3,4,5])
+      nz = 3
+      Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))
+      Z0[::nz+1] = Z
+      print Z0
+
+
+9. Consider an array of dimension (5,5,3), how to mulitply it by an array with
+   dimensions (5,5) ?
+
+   .. code-block:: python
+
+      A = np.ones((5,5,3))
+      B = 2*np.ones((5,5))
+      print A * B[:,:,None]
+
+
+10. How to swap two rows of an array ?
+
+
+    .. code-block:: python
+
+       # Author: Eelco Hoogendoorn
+
+       A = np.arange(25).reshape(5,5)
+       A[[0,1]] = A[[1,0]]
+       print A
+
 
 Craftsman
 =========