1036 lines
185 KiB
HTML
1036 lines
185 KiB
HTML
<?xml version="1.0" encoding="utf-8" ?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
|
|
<title>100 numpy exercises</title>
|
|
<link rel="stylesheet" href="numpy.css" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div class="document" id="numpy-exercises">
|
|
<h1 class="title">100 numpy exercises</h1>
|
|
<h2 class="subtitle" id="a-joint-effort-of-the-numpy-community">A joint effort of the numpy community</h2>
|
|
|
|
<p>The goal is both to offer a quick reference for new and old users and to
|
|
provide also a set of exercices for those who teach. If you remember having
|
|
asked or answered a (short) problem, you can send a pull request. The format
|
|
is:</p>
|
|
<pre class="literal-block">
|
|
#. Find indices of non-zero elements from [1,2,0,0,4,0]
|
|
|
|
.. code:: python
|
|
|
|
# Author: Somebody
|
|
|
|
print(np.nonzero([1,2,0,0,4,0]))
|
|
</pre>
|
|
<p>Here is what the page looks like so far:
|
|
<a class="reference external" href="http://www.labri.fr/perso/nrougier/teaching/numpy.100/index.html">http://www.labri.fr/perso/nrougier/teaching/numpy.100/index.html</a></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>Thanks to Michiaki Ariga, there is now a
|
|
<a class="reference external" href="https://github.com/chezou/julia-100-exercises">Julia version</a>.</p>
|
|
<ol class="arabic">
|
|
<li><p class="first">Import the numpy package under the name <tt class="docutils literal">np</tt> (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword namespace">import</span> <span class="name namespace">numpy</span> <span class="keyword namespace">as</span> <span class="name namespace">np</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Print the numpy version and the configuration (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">__version__</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">show_config</span><span class="punctuation">()</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a null vector of size 10 (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to find the memory size of any array (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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><span class="literal number integer">10</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="literal string double">"</span><span class="literal string interpol">%d</span><span class="literal string double"> bytes"</span> <span class="operator">%</span> <span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">size</span> <span class="operator">*</span> <span class="name">Z</span><span class="operator">.</span><span class="name">itesize</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to get the documentation of the numpy add function from the command line? (★☆☆)</p>
|
|
<pre class="code bash literal-block">
|
|
python -c <span class="literal string double">"import numpy; numpy.info(numpy.add)"</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a null vector of size 10 but the fifth value which is 1 (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">4</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">1</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a vector with values ranging from 10 to 49 (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">10</span><span class="punctuation">,</span><span class="literal number integer">50</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Reverse a vector (first element becomes last) (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">50</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span> <span class="operator">=</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>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 3x3 matrix with values ranging from 0 to 8 (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">9</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">reshape</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="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Find indices of non-zero elements from [1,2,0,0,4,0] (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">nz</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">nonzero</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">0</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">,</span><span class="literal number integer">4</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">])</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">nz</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 3x3 identity matrix (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">eye</span><span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 3x3x3 array with random values (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</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">3</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 10x10 array with random values and find the minimum and maximum values (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">((</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="name">Zmin</span><span class="punctuation">,</span> <span class="name">Zmax</span> <span class="operator">=</span> <span class="name">Z</span><span class="operator">.</span><span class="name">min</span><span class="punctuation">(),</span> <span class="name">Z</span><span class="operator">.</span><span class="name">max</span><span class="punctuation">()</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Zmin</span><span class="punctuation">,</span> <span class="name">Zmax</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a random vector of size 30 and find the mean value (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">(</span><span class="literal number integer">30</span><span class="punctuation">)</span>
|
|
<span class="name">m</span> <span class="operator">=</span> <span class="name">Z</span><span class="operator">.</span><span class="name">mean</span><span class="punctuation">()</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">m</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 2d array with 1 on the border and 0 inside (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">10</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">))</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">-</span><span class="literal number integer">1</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">0</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to add a border (filled with 0's) around an existing array ? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">pad</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">,</span> <span class="name">pad_width</span><span class="operator">=</span><span class="literal number integer">1</span><span class="punctuation">,</span> <span class="name">mode</span><span class="operator">=</span><span class="literal string single">'constant'</span><span class="punctuation">,</span> <span class="name">constant_values</span><span class="operator">=</span><span class="literal number integer">0</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">What is the result of the following expression? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="literal number integer">0</span> <span class="operator">*</span> <span class="name">np</span><span class="operator">.</span><span class="name">nan</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">nan</span> <span class="operator">==</span> <span class="name">np</span><span class="operator">.</span><span class="name">nan</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">inf</span> <span class="operator">></span> <span class="name">np</span><span class="operator">.</span><span class="name">nan</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">nan</span> <span class="operator">-</span> <span class="name">np</span><span class="operator">.</span><span class="name">nan</span>
|
|
<span class="literal number float">0.3</span> <span class="operator">==</span> <span class="literal number integer">3</span> <span class="operator">*</span> <span class="literal number float">0.1</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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="literal number integer">1</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">4</span><span class="punctuation">),</span><span class="name">k</span><span class="operator">=-</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 8x8 matrix and fill it with a checkerboard pattern (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">8</span><span class="punctuation">,</span><span class="literal number integer">8</span><span class="punctuation">),</span><span class="name">dtype</span><span class="operator">=</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">Z</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">2</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">1</span>
|
|
<span class="name">Z</span><span class="punctuation">[::</span><span class="literal number integer">2</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="operator">=</span> <span class="literal number integer">1</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a (6,7,8) shape array, what is the index (x,y,z) of the 100th element?</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">unravel_index</span><span class="punctuation">(</span><span class="literal number integer">100</span><span class="punctuation">,(</span><span class="literal number integer">6</span><span class="punctuation">,</span><span class="literal number integer">7</span><span class="punctuation">,</span><span class="literal number integer">8</span><span class="punctuation">)))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a checkerboard 8x8 matrix using the tile function (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">tile</span><span class="punctuation">(</span> <span class="name">np</span><span class="operator">.</span><span class="name">array</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">1</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">]]),</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="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Normalize a 5x5 random matrix (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</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">Zmax</span><span class="punctuation">,</span> <span class="name">Zmin</span> <span class="operator">=</span> <span class="name">Z</span><span class="operator">.</span><span class="name">max</span><span class="punctuation">(),</span> <span class="name">Z</span><span class="operator">.</span><span class="name">min</span><span class="punctuation">()</span>
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">Z</span> <span class="operator">-</span> <span class="name">Zmin</span><span class="punctuation">)</span><span class="operator">/</span><span class="punctuation">(</span><span class="name">Zmax</span> <span class="operator">-</span> <span class="name">Zmin</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a custom dtype that describes a color as four unisgned bytes (RGBA) (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">color</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">dtype</span><span class="punctuation">([(</span><span class="literal string double">"r"</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">ubyte</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string double">"g"</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">ubyte</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string double">"b"</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">ubyte</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string double">"a"</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">ubyte</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">)])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Multiply a 5x3 matrix by a 3x2 matrix (real matrix product) (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">dot</span><span class="punctuation">(</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">3</span><span class="punctuation">)),</span> <span class="name">np</span><span class="operator">.</span><span class="name">ones</span><span class="punctuation">((</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">)))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given a 1D array, negate all elements which are between 3 and 8, in place. (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Evgeni Burovski</span>
|
|
|
|
<span class="name">Z</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">11</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span><span class="punctuation">[(</span><span class="literal number integer">3</span> <span class="operator"><</span> <span class="name">Z</span><span class="punctuation">)</span> <span class="operator">&</span> <span class="punctuation">(</span><span class="name">Z</span> <span class="operator"><=</span> <span class="literal number integer">8</span><span class="punctuation">)]</span> <span class="operator">*=</span> <span class="operator">-</span><span class="literal number integer">1</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">What is the output of the following script? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jake VanderPlas</span>
|
|
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name builtin">sum</span><span class="punctuation">(</span><span class="name builtin">range</span><span class="punctuation">(</span><span class="literal number integer">5</span><span class="punctuation">),</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">))</span>
|
|
<span class="keyword namespace">from</span> <span class="name namespace">numpy</span> <span class="keyword namespace">import</span> <span class="operator">*</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name builtin">sum</span><span class="punctuation">(</span><span class="name builtin">range</span><span class="punctuation">(</span><span class="literal number integer">5</span><span class="punctuation">),</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider an integer vector Z, which of these expressions are legal? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</span><span class="operator">**</span><span class="name">Z</span>
|
|
<span class="literal number integer">2</span> <span class="operator"><<</span> <span class="name">Z</span> <span class="operator">>></span> <span class="literal number integer">2</span>
|
|
<span class="name">Z</span> <span class="operator"><-</span> <span class="name">Z</span>
|
|
<span class="literal number integer">1j</span><span class="operator">*</span><span class="name">Z</span>
|
|
<span class="name">Z</span><span class="operator">/</span><span class="literal number integer">1</span><span class="operator">/</span><span class="literal number integer">1</span>
|
|
<span class="name">Z</span><span class="operator"><</span><span class="name">Z</span><span class="operator">></span><span class="name">Z</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">What are the result of the following expressions?</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">array</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">)</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">0</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">array</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">)</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">0</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">array</span><span class="punctuation">([</span><span class="name">np</span><span class="operator">.</span><span class="name">nan</span><span class="punctuation">])</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">float</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to round away from zero a float array ? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Charles R Harris</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">uniform</span><span class="punctuation">(</span><span class="operator">-</span><span class="literal number integer">10</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="keyword">print</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">trunc</span><span class="punctuation">(</span><span class="name">Z</span> <span class="operator">+</span> <span class="name">np</span><span class="operator">.</span><span class="name">copysign</span><span class="punctuation">(</span><span class="literal number float">0.5</span><span class="punctuation">,</span> <span class="name">Z</span><span class="punctuation">)))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to find common values between two arrays? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z1</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">10</span><span class="punctuation">)</span>
|
|
<span class="name">Z2</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">10</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">intersect1d</span><span class="punctuation">(</span><span class="name">Z1</span><span class="punctuation">,</span><span class="name">Z2</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to ignore all numpy warnings (not recommended)? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Suicide mode on</span>
|
|
<span class="name">defaults</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">seterr</span><span class="punctuation">(</span><span class="name builtin">all</span><span class="operator">=</span><span class="literal string double">"ignore"</span><span class="punctuation">)</span>
|
|
<span class="name">Z</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">1</span><span class="punctuation">)</span><span class="operator">/</span><span class="literal number integer">0</span>
|
|
|
|
<span class="comment single"># Back to sanity</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">seterr</span><span class="punctuation">(</span><span class="operator">**</span><span class="name">defaults</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Is the following expressions true? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">sqrt</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">np</span><span class="operator">.</span><span class="name">emath</span><span class="operator">.</span><span class="name">sqrt</span><span class="punctuation">(</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to get the dates of yesterday, today and tomorrow? (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">yesterday</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">datetime64</span><span class="punctuation">(</span><span class="literal string single">'today'</span><span class="punctuation">,</span> <span class="literal string single">'D'</span><span class="punctuation">)</span> <span class="operator">-</span> <span class="name">np</span><span class="operator">.</span><span class="name">timedelta64</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">,</span> <span class="literal string single">'D'</span><span class="punctuation">)</span>
|
|
<span class="name">today</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">datetime64</span><span class="punctuation">(</span><span class="literal string single">'today'</span><span class="punctuation">,</span> <span class="literal string single">'D'</span><span class="punctuation">)</span>
|
|
<span class="name">tomorrow</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">datetime64</span><span class="punctuation">(</span><span class="literal string single">'today'</span><span class="punctuation">,</span> <span class="literal string single">'D'</span><span class="punctuation">)</span> <span class="operator">+</span> <span class="name">np</span><span class="operator">.</span><span class="name">timedelta64</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">,</span> <span class="literal string single">'D'</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to get all the dates corresponding to the month of July 2016? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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 string single">'2016-07'</span><span class="punctuation">,</span> <span class="literal string single">'2016-08'</span><span class="punctuation">,</span> <span class="name">dtype</span><span class="operator">=</span><span class="literal string single">'datetime64[D]'</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to compute ((A+B)*(-A/2)) in place (without copy)? (★★☆)</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">3</span><span class="punctuation">)</span><span class="operator">*</span><span class="literal number integer">1</span>
|
|
<span class="name">B</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">3</span><span class="punctuation">)</span><span class="operator">*</span><span class="literal number integer">2</span>
|
|
<span class="name">C</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">3</span><span class="punctuation">)</span><span class="operator">*</span><span class="literal number integer">3</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">add</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span><span class="name">B</span><span class="punctuation">,</span><span class="name">out</span><span class="operator">=</span><span class="name">B</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">divide</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="name">out</span><span class="operator">=</span><span class="name">A</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">negative</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span><span class="name">out</span><span class="operator">=</span><span class="name">A</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">multiply</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span><span class="name">B</span><span class="punctuation">,</span><span class="name">out</span><span class="operator">=</span><span class="name">A</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Extract the integer part of a random array using 5 different methods (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">uniform</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">10</span><span class="punctuation">)</span>
|
|
|
|
<span class="keyword">print</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="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">floor</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">ceil</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="keyword">print</span> <span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">trunc</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 5x5 matrix with row values ranging from 0 to 4 (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">5</span><span class="punctuation">,</span><span class="literal number integer">5</span><span class="punctuation">))</span>
|
|
<span class="name">Z</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">5</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a generator function that generates 10 integers and use it to build an
|
|
array (★☆☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword">def</span> <span class="name function">generate</span><span class="punctuation">():</span>
|
|
<span class="keyword">for</span> <span class="name">x</span> <span class="operator word">in</span> <span class="name builtin">xrange</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">):</span>
|
|
<span class="keyword">yield</span> <span class="name">x</span>
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">fromiter</span><span class="punctuation">(</span><span class="name">generate</span><span class="punctuation">(),</span><span class="name">dtype</span><span class="operator">=</span><span class="name builtin">float</span><span class="punctuation">,</span><span class="name">count</span><span class="operator">=-</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a vector of size 10 with values ranging from 0 to 1, both excluded (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">linspace</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">12</span><span class="punctuation">,</span><span class="name">endpoint</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a random vector of size 10 and sort it (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span><span class="operator">.</span><span class="name">sort</span><span class="punctuation">()</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to sum a small array faster than np.sum? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Evgeni Burovski</span>
|
|
|
|
<span class="name">Z</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">10</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">add</span><span class="operator">.</span><span class="name">reduce</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider two random array A anb B, check if they are equal (★★☆)</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">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">2</span><span class="punctuation">,</span><span class="literal number integer">5</span><span class="punctuation">)</span>
|
|
<span class="name">B</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">2</span><span class="punctuation">,</span><span class="literal number integer">5</span><span class="punctuation">)</span>
|
|
<span class="name">equal</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">allclose</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span><span class="name">B</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">equal</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Make an array immutable (read-only) (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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>
|
|
<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>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">1</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a random 10x2 matrix representing cartesian coordinates, convert
|
|
them to polar coordinates (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">((</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<span class="name">X</span><span class="punctuation">,</span><span class="name">Y</span> <span class="operator">=</span> <span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">0</span><span class="punctuation">],</span> <span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">]</span>
|
|
<span class="name">R</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">sqrt</span><span class="punctuation">(</span><span class="name">X</span><span class="operator">**</span><span class="literal number integer">2</span><span class="operator">+</span><span class="name">Y</span><span class="operator">**</span><span class="literal number integer">2</span><span class="punctuation">)</span>
|
|
<span class="name">T</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">arctan2</span><span class="punctuation">(</span><span class="name">Y</span><span class="punctuation">,</span><span class="name">X</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">R</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">T</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create random vector of size 10 and replace the maximum value by 0 (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="name">Z</span><span class="operator">.</span><span class="name">argmax</span><span class="punctuation">()]</span> <span class="operator">=</span> <span class="literal number integer">0</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a structured array with <tt class="docutils literal">x</tt> and <tt class="docutils literal">y</tt> coordinates covering the
|
|
[0,1]x[0,1] area (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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><span class="literal number integer">10</span><span class="punctuation">),</span> <span class="punctuation">[(</span><span class="literal string single">'x'</span><span class="punctuation">,</span><span class="name builtin">float</span><span class="punctuation">),(</span><span class="literal string single">'y'</span><span class="punctuation">,</span><span class="name builtin">float</span><span class="punctuation">)])</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal string single">'x'</span><span class="punctuation">],</span> <span class="name">Z</span><span class="punctuation">[</span><span class="literal string single">'y'</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">meshgrid</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">linspace</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">10</span><span class="punctuation">),</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">linspace</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">10</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given two arrays, X and Y, construct the Cauchy matrix C (Cij = 1/(xi - yj))</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Evgeni Burovski</span>
|
|
|
|
<span class="name">X</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">8</span><span class="punctuation">)</span>
|
|
<span class="name">Y</span> <span class="operator">=</span> <span class="name">X</span> <span class="operator">+</span> <span class="literal number float">0.5</span>
|
|
<span class="name">C</span> <span class="operator">=</span> <span class="literal number float">1.0</span> <span class="operator">/</span> <span class="name">np</span><span class="operator">.</span><span class="name">subtract</span><span class="operator">.</span><span class="name">outer</span><span class="punctuation">(</span><span class="name">X</span><span class="punctuation">,</span> <span class="name">Y</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">linalg</span><span class="operator">.</span><span class="name">det</span><span class="punctuation">(</span><span class="name">C</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Print the minimum and maximum representable value for each numpy scalar type (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword">for</span> <span class="name">dtype</span> <span class="operator word">in</span> <span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">int8</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">int32</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">int64</span><span class="punctuation">]:</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">iinfo</span><span class="punctuation">(</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">min</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">iinfo</span><span class="punctuation">(</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">max</span><span class="punctuation">)</span>
|
|
<span class="keyword">for</span> <span class="name">dtype</span> <span class="operator word">in</span> <span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">float32</span><span class="punctuation">,</span> <span class="name">np</span><span class="operator">.</span><span class="name">float64</span><span class="punctuation">]:</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">finfo</span><span class="punctuation">(</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">min</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">finfo</span><span class="punctuation">(</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">max</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">finfo</span><span class="punctuation">(</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">eps</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to print all the values of an array? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">set_printoptions</span><span class="punctuation">(</span><span class="name">threshold</span><span class="operator">=</span><span class="name">np</span><span class="operator">.</span><span class="name">nan</span><span class="punctuation">)</span>
|
|
<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">25</span><span class="punctuation">,</span><span class="literal number integer">25</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to find the closest value (to a given scalar) in an array? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">100</span><span class="punctuation">)</span>
|
|
<span class="name">v</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">100</span><span class="punctuation">)</span>
|
|
<span class="name">index</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">abs</span><span class="punctuation">(</span><span class="name">Z</span><span class="operator">-</span><span class="name">v</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">argmin</span><span class="punctuation">()</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="name">index</span><span class="punctuation">])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a structured array representing a position (x,y) and a color (r,g,b) (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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> <span class="punctuation">[</span> <span class="punctuation">(</span><span class="literal string single">'position'</span><span class="punctuation">,</span> <span class="punctuation">[</span> <span class="punctuation">(</span><span class="literal string single">'x'</span><span class="punctuation">,</span> <span class="name builtin">float</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string single">'y'</span><span class="punctuation">,</span> <span class="name builtin">float</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">)]),</span>
|
|
<span class="punctuation">(</span><span class="literal string single">'color'</span><span class="punctuation">,</span> <span class="punctuation">[</span> <span class="punctuation">(</span><span class="literal string single">'r'</span><span class="punctuation">,</span> <span class="name builtin">float</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string single">'g'</span><span class="punctuation">,</span> <span class="name builtin">float</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string single">'b'</span><span class="punctuation">,</span> <span class="name builtin">float</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">)])])</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a random vector with shape (100,2) representing coordinates, find
|
|
point by point distances (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<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">random</span><span class="punctuation">((</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<span class="name">X</span><span class="punctuation">,</span><span class="name">Y</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">atleast_2d</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">0</span><span class="punctuation">]),</span> <span class="name">np</span><span class="operator">.</span><span class="name">atleast_2d</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">])</span>
|
|
<span class="name">D</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">sqrt</span><span class="punctuation">(</span> <span class="punctuation">(</span><span class="name">X</span><span class="operator">-</span><span class="name">X</span><span class="operator">.</span><span class="name">T</span><span class="punctuation">)</span><span class="operator">**</span><span class="literal number integer">2</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name">Y</span><span class="operator">-</span><span class="name">Y</span><span class="operator">.</span><span class="name">T</span><span class="punctuation">)</span><span class="operator">**</span><span class="literal number integer">2</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">D</span><span class="punctuation">)</span>
|
|
|
|
<span class="comment single"># Much faster with scipy</span>
|
|
<span class="keyword namespace">import</span> <span class="name namespace">scipy</span>
|
|
<span class="comment single"># Thanks Gavin Heverly-Coulson (#issue 1)</span>
|
|
<span class="keyword namespace">import</span> <span class="name namespace">scipy.spatial</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">random</span><span class="punctuation">((</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<span class="name">D</span> <span class="operator">=</span> <span class="name">scipy</span><span class="operator">.</span><span class="name">spatial</span><span class="operator">.</span><span class="name">distance</span><span class="operator">.</span><span class="name">cdist</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">,</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">D</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to convert a float (32 bits) array into an integer (32 bits) in place?</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">10</span><span class="punctuation">,</span> <span class="name">dtype</span><span class="operator">=</span><span class="name">np</span><span class="operator">.</span><span class="name">int32</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">astype</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">float32</span><span class="punctuation">,</span> <span class="name">copy</span><span class="operator">=</span><span class="name builtin pseudo">False</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to read the following file? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># File content:</span>
|
|
<span class="comment single"># -------------</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="literal number integer">6</span><span class="punctuation">,,,</span><span class="literal number integer">7</span><span class="punctuation">,</span><span class="literal number integer">8</span>
|
|
<span class="punctuation">,,</span><span class="literal number integer">9</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">11</span>
|
|
<span class="comment single"># -------------</span>
|
|
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">genfromtxt</span><span class="punctuation">(</span><span class="literal string double">"missing.dat"</span><span class="punctuation">,</span> <span class="name">delimiter</span><span class="operator">=</span><span class="literal string double">","</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">What is the equivalent of <cite>enumerate</cite> for numpy arrays? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">9</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">reshape</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="keyword">for</span> <span class="name">index</span><span class="punctuation">,</span> <span class="name">value</span> <span class="operator word">in</span> <span class="name">np</span><span class="operator">.</span><span class="name">ndenumerate</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">):</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">index</span><span class="punctuation">,</span> <span class="name">value</span><span class="punctuation">)</span>
|
|
<span class="keyword">for</span> <span class="name">index</span> <span class="operator word">in</span> <span class="name">np</span><span class="operator">.</span><span class="name">ndindex</span><span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">):</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">index</span><span class="punctuation">,</span> <span class="name">Z</span><span class="punctuation">[</span><span class="name">index</span><span class="punctuation">])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Generate a generic 2D Gaussian-like array (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">X</span><span class="punctuation">,</span> <span class="name">Y</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">meshgrid</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">linspace</span><span class="punctuation">(</span><span class="operator">-</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">10</span><span class="punctuation">),</span> <span class="name">np</span><span class="operator">.</span><span class="name">linspace</span><span class="punctuation">(</span><span class="operator">-</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">10</span><span class="punctuation">))</span>
|
|
<span class="name">D</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">sqrt</span><span class="punctuation">(</span><span class="name">X</span><span class="operator">*</span><span class="name">X</span><span class="operator">+</span><span class="name">Y</span><span class="operator">*</span><span class="name">Y</span><span class="punctuation">)</span>
|
|
<span class="name">sigma</span><span class="punctuation">,</span> <span class="name">mu</span> <span class="operator">=</span> <span class="literal number float">1.0</span><span class="punctuation">,</span> <span class="literal number float">0.0</span>
|
|
<span class="name">G</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">exp</span><span class="punctuation">(</span><span class="operator">-</span><span class="punctuation">(</span> <span class="punctuation">(</span><span class="name">D</span><span class="operator">-</span><span class="name">mu</span><span class="punctuation">)</span><span class="operator">**</span><span class="literal number integer">2</span> <span class="operator">/</span> <span class="punctuation">(</span> <span class="literal number float">2.0</span> <span class="operator">*</span> <span class="name">sigma</span><span class="operator">**</span><span class="literal number integer">2</span> <span class="punctuation">)</span> <span class="punctuation">)</span> <span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">G</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to randomly place p elements in a 2D array? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Divakar</span>
|
|
|
|
<span class="name">n</span> <span class="operator">=</span> <span class="literal number integer">10</span>
|
|
<span class="name">p</span> <span class="operator">=</span> <span class="literal number integer">3</span>
|
|
<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="name">n</span><span class="punctuation">,</span><span class="name">n</span><span class="punctuation">))</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">put</span><span class="punctuation">(</span><span class="name">Z</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">choice</span><span class="punctuation">(</span><span class="name builtin">range</span><span class="punctuation">(</span><span class="name">n</span><span class="operator">*</span><span class="name">n</span><span class="punctuation">),</span> <span class="name">p</span><span class="punctuation">,</span> <span class="name">replace</span><span class="operator">=</span><span class="name builtin pseudo">False</span><span class="punctuation">),</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Subtract the mean of each row of a matrix (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Warren Weckesser</span>
|
|
|
|
<span class="name">X</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">rand</span><span class="punctuation">(</span><span class="literal number integer">5</span><span class="punctuation">,</span> <span class="literal number integer">10</span><span class="punctuation">)</span>
|
|
|
|
<span class="comment single"># Recent versions of numpy</span>
|
|
<span class="name">Y</span> <span class="operator">=</span> <span class="name">X</span> <span class="operator">-</span> <span class="name">X</span><span class="operator">.</span><span class="name">mean</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> <span class="name">keepdims</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span>
|
|
|
|
<span class="comment single"># Older versions of numpy</span>
|
|
<span class="name">Y</span> <span class="operator">=</span> <span class="name">X</span> <span class="operator">-</span> <span class="name">X</span><span class="operator">.</span><span class="name">mean</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><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to I sort an array by the nth column? (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Steve Tjoa</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">10</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="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">.</span><span class="name">argsort</span><span class="punctuation">()])</span>
|
|
</pre>
|
|
</li>
|
|
<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 single"># 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">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>
|
|
<pre class="code python literal-block">
|
|
<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">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">10</span><span class="punctuation">)</span>
|
|
<span class="name">z</span> <span class="operator">=</span> <span class="literal number float">0.5</span>
|
|
<span class="name">m</span> <span class="operator">=</span> <span class="name">Z</span><span class="operator">.</span><span class="name">flat</span><span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">abs</span><span class="punctuation">(</span><span class="name">Z</span> <span class="operator">-</span> <span class="name">z</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">argmin</span><span class="punctuation">()]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">m</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering two arrays with shape (1,3) and (3,1), how to compute their sum
|
|
using an iterator? (★★☆)</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">arange</span><span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="name">B</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">3</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<span class="name">it</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">nditer</span><span class="punctuation">([</span><span class="name">A</span><span class="punctuation">,</span><span class="name">B</span><span class="punctuation">,</span><span class="name builtin pseudo">None</span><span class="punctuation">]):</span>
|
|
<span class="keyword">for</span> <span class="name">x</span><span class="punctuation">,</span><span class="name">y</span><span class="punctuation">,</span><span class="name">z</span> <span class="operator word">in</span> <span class="name">it</span><span class="punctuation">:</span> <span class="name">z</span><span class="punctuation">[</span><span class="operator">...</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">x</span> <span class="operator">+</span> <span class="name">y</span>
|
|
<span class="name">C</span> <span class="operator">=</span> <span class="name">it</span><span class="operator">.</span><span class="name">operands</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">]</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create an array class that has a <cite>name</cite> attribute (★★☆)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="keyword">class</span> <span class="name class">NamedArray</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">ndarray</span><span class="punctuation">):</span>
|
|
<span class="keyword">def</span> <span class="name function">__new__</span><span class="punctuation">(</span><span class="name">cls</span><span class="punctuation">,</span> <span class="name">array</span><span class="punctuation">,</span> <span class="name">name</span><span class="operator">=</span><span class="literal string double">"no name"</span><span class="punctuation">):</span>
|
|
<span class="name">obj</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">asarray</span><span class="punctuation">(</span><span class="name">array</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">view</span><span class="punctuation">(</span><span class="name">cls</span><span class="punctuation">)</span>
|
|
<span class="name">obj</span><span class="operator">.</span><span class="name">name</span> <span class="operator">=</span> <span class="name">name</span>
|
|
<span class="keyword">return</span> <span class="name">obj</span>
|
|
<span class="keyword">def</span> <span class="name function">__array_finalize__</span><span class="punctuation">(</span><span class="name builtin pseudo">self</span><span class="punctuation">,</span> <span class="name">obj</span><span class="punctuation">):</span>
|
|
<span class="keyword">if</span> <span class="name">obj</span> <span class="operator word">is</span> <span class="name builtin pseudo">None</span><span class="punctuation">:</span> <span class="keyword">return</span>
|
|
<span class="name builtin pseudo">self</span><span class="operator">.</span><span class="name">info</span> <span class="operator">=</span> <span class="name builtin">getattr</span><span class="punctuation">(</span><span class="name">obj</span><span class="punctuation">,</span> <span class="literal string single">'name'</span><span class="punctuation">,</span> <span class="literal string double">"no name"</span><span class="punctuation">)</span>
|
|
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">NamedArray</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="literal number integer">10</span><span class="punctuation">),</span> <span class="literal string double">"range_10"</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">name</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a given vector, how to add 1 to each element indexed by a second
|
|
vector (be careful with repeated indices)? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Brett Olsen</span>
|
|
|
|
<span class="name">Z</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">10</span><span class="punctuation">)</span>
|
|
<span class="name">I</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="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">),</span><span class="literal number integer">20</span><span class="punctuation">)</span>
|
|
<span class="name">Z</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">I</span><span class="punctuation">,</span> <span class="name">minlength</span><span class="operator">=</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to accumulate elements of a vector (X) to an array (F) based on an index
|
|
list (I)? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Alan G Isaac</span>
|
|
|
|
<span class="name">X</span> <span class="operator">=</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="literal number integer">6</span><span class="punctuation">]</span>
|
|
<span class="name">I</span> <span class="operator">=</span> <span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">9</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">1</span><span class="punctuation">]</span>
|
|
<span class="name">F</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">I</span><span class="punctuation">,</span><span class="name">X</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">F</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering a (w,h,3) image of (dtype=ubyte), compute the number of unique
|
|
colors (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Nadav Horesh</span>
|
|
|
|
<span class="name">w</span><span class="punctuation">,</span><span class="name">h</span> <span class="operator">=</span> <span class="literal number integer">16</span><span class="punctuation">,</span><span class="literal number integer">16</span>
|
|
<span class="name">I</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">2</span><span class="punctuation">,(</span><span class="name">h</span><span class="punctuation">,</span><span class="name">w</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">ubyte</span><span class="punctuation">)</span>
|
|
<span class="name">F</span> <span class="operator">=</span> <span class="name">I</span><span class="punctuation">[</span><span class="operator">...</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">]</span><span class="operator">*</span><span class="literal number integer">256</span><span class="operator">*</span><span class="literal number integer">256</span> <span class="operator">+</span> <span class="name">I</span><span class="punctuation">[</span><span class="operator">...</span><span class="punctuation">,</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">*</span><span class="literal number integer">256</span> <span class="operator">+</span><span class="name">I</span><span class="punctuation">[</span><span class="operator">...</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">]</span>
|
|
<span class="name">n</span> <span class="operator">=</span> <span class="name builtin">len</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">unique</span><span class="punctuation">(</span><span class="name">F</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">unique</span><span class="punctuation">(</span><span class="name">I</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering a four dimensions array, how to get sum over the last two axis
|
|
at once? (★★★)</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">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">3</span><span class="punctuation">,</span><span class="literal number integer">4</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="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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name builtin">sum</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering a one-dimensional vector D, how to compute means of subsets of D
|
|
using a vector S of same size describing subset indices? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jaime Fernández del Río</span>
|
|
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">D_means</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to get the diagonal of a dot product? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Mathieu Blondel</span>
|
|
|
|
<span class="comment single"># Slow version</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">diag</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">dot</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">))</span>
|
|
|
|
<span class="comment single"># Fast version</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">sum</span><span class="punctuation">(</span><span class="name">A</span> <span class="operator">*</span> <span class="name">B</span><span class="operator">.</span><span class="name">T</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>
|
|
|
|
<span class="comment single"># Faster version</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string double">"ij,ji->i"</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">)</span><span class="operator">.</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 single"># 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="punctuation">(</span><span class="name">Z0</span><span class="punctuation">)</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="punctuation">(</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 single"># 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="punctuation">(</span><span class="name">A</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a set of 10 triplets describing 10 triangles (with shared
|
|
vertices), find the set of unique line segments composing all the triangles (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Nicolas P. Rougier</span>
|
|
|
|
<span class="name">faces</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">100</span><span class="punctuation">,(</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">))</span>
|
|
<span class="name">F</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">roll</span><span class="punctuation">(</span><span class="name">faces</span><span class="operator">.</span><span class="name">repeat</span><span class="punctuation">(</span><span class="literal number integer">2</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><span class="operator">-</span><span class="literal number integer">1</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>
|
|
<span class="name">F</span> <span class="operator">=</span> <span class="name">F</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">F</span><span class="punctuation">)</span><span class="operator">*</span><span class="literal number integer">3</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">)</span>
|
|
<span class="name">F</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">sort</span><span class="punctuation">(</span><span class="name">F</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>
|
|
<span class="name">G</span> <span class="operator">=</span> <span class="name">F</span><span class="operator">.</span><span class="name">view</span><span class="punctuation">(</span> <span class="name">dtype</span><span class="operator">=</span><span class="punctuation">[(</span><span class="literal string single">'p0'</span><span class="punctuation">,</span><span class="name">F</span><span class="operator">.</span><span class="name">dtype</span><span class="punctuation">),(</span><span class="literal string single">'p1'</span><span class="punctuation">,</span><span class="name">F</span><span class="operator">.</span><span class="name">dtype</span><span class="punctuation">)]</span> <span class="punctuation">)</span>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">G</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given an array C that is a bincount, how to produce an array A such that
|
|
np.bincount(A) == C? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jaime Fernández del Río</span>
|
|
|
|
<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>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">A</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to compute averages using a sliding window over an array? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jaime Fernández del Río</span>
|
|
|
|
<span class="keyword">def</span> <span class="name function">moving_average</span><span class="punctuation">(</span><span class="name">a</span><span class="punctuation">,</span> <span class="name">n</span><span class="operator">=</span><span class="literal number integer">3</span><span class="punctuation">)</span> <span class="punctuation">:</span>
|
|
<span class="name">ret</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">cumsum</span><span class="punctuation">(</span><span class="name">a</span><span class="punctuation">,</span> <span class="name">dtype</span><span class="operator">=</span><span class="name builtin">float</span><span class="punctuation">)</span>
|
|
<span class="name">ret</span><span class="punctuation">[</span><span class="name">n</span><span class="punctuation">:]</span> <span class="operator">=</span> <span class="name">ret</span><span class="punctuation">[</span><span class="name">n</span><span class="punctuation">:]</span> <span class="operator">-</span> <span class="name">ret</span><span class="punctuation">[:</span><span class="operator">-</span><span class="name">n</span><span class="punctuation">]</span>
|
|
<span class="keyword">return</span> <span class="name">ret</span><span class="punctuation">[</span><span class="name">n</span> <span class="operator">-</span> <span class="literal number integer">1</span><span class="punctuation">:]</span> <span class="operator">/</span> <span class="name">n</span>
|
|
<span class="name">Z</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">20</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">moving_average</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">,</span> <span class="name">n</span><span class="operator">=</span><span class="literal number integer">3</span><span class="punctuation">))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a one-dimensional array Z, build a two-dimensional array whose
|
|
first row is (Z[0],Z[1],Z[2]) and each subsequent row is shifted by 1 (last
|
|
row should be (Z[-3],Z[-2],Z[-1]) (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Joe Kington / Erik Rigtorp</span>
|
|
<span class="keyword namespace">from</span> <span class="name namespace">numpy.lib</span> <span class="keyword namespace">import</span> <span class="name">stride_tricks</span>
|
|
|
|
<span class="keyword">def</span> <span class="name function">rolling</span><span class="punctuation">(</span><span class="name">a</span><span class="punctuation">,</span> <span class="name">window</span><span class="punctuation">):</span>
|
|
<span class="name">shape</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">a</span><span class="operator">.</span><span class="name">size</span> <span class="operator">-</span> <span class="name">window</span> <span class="operator">+</span> <span class="literal number integer">1</span><span class="punctuation">,</span> <span class="name">window</span><span class="punctuation">)</span>
|
|
<span class="name">strides</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">a</span><span class="operator">.</span><span class="name">itemsize</span><span class="punctuation">,</span> <span class="name">a</span><span class="operator">.</span><span class="name">itemsize</span><span class="punctuation">)</span>
|
|
<span class="keyword">return</span> <span class="name">stride_tricks</span><span class="operator">.</span><span class="name">as_strided</span><span class="punctuation">(</span><span class="name">a</span><span class="punctuation">,</span> <span class="name">shape</span><span class="operator">=</span><span class="name">shape</span><span class="punctuation">,</span> <span class="name">strides</span><span class="operator">=</span><span class="name">strides</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span> <span class="operator">=</span> <span class="name">rolling</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="literal number integer">10</span><span class="punctuation">),</span> <span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to negate a boolean, or to change the sign of a float inplace? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Nathaniel J. Smith</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">2</span><span class="punctuation">,</span><span class="literal number integer">100</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">logical_not</span><span class="punctuation">(</span><span class="name">arr</span><span class="punctuation">,</span> <span class="name">out</span><span class="operator">=</span><span class="name">arr</span><span class="punctuation">)</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">uniform</span><span class="punctuation">(</span><span class="operator">-</span><span class="literal number float">1.0</span><span class="punctuation">,</span><span class="literal number float">1.0</span><span class="punctuation">,</span><span class="literal number integer">100</span><span class="punctuation">)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">negative</span><span class="punctuation">(</span><span class="name">arr</span><span class="punctuation">,</span> <span class="name">out</span><span class="operator">=</span><span class="name">arr</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider 2 sets of points P0,P1 describing lines (2d) and a point p, how to
|
|
compute distance from p to each line i (P0[i],P1[i])? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<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>
|
|
<span class="name">T</span> <span class="operator">=</span> <span class="name">P1</span> <span class="operator">-</span> <span class="name">P0</span>
|
|
<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>
|
|
<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="operator">...</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="operator">...</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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
|
|
<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">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<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">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</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>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider 2 sets of points P0,P1 describing lines (2d) and a set of points P,
|
|
how to compute distance from each point j (P[j]) to each line i (P0[i],P1[i])? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Italmassov Kuanysh</span>
|
|
<span class="comment single"># based on distance function from previous question</span>
|
|
<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="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<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">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<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="punctuation">(</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span> <span class="name">np</span><span class="operator">.</span><span class="name">array</span><span class="punctuation">([</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_i</span><span class="punctuation">)</span> <span class="keyword">for</span> <span class="name">p_i</span> <span class="operator word">in</span> <span class="name">p</span><span class="punctuation">])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider an arbitrary array, write a function that extract a subpart with a
|
|
fixed shape and centered on a given element (pad with a <tt class="docutils literal">fill</tt> value when
|
|
necessary) (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Nicolas Rougier</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">10</span><span class="punctuation">,(</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="name">shape</span> <span class="operator">=</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">fill</span> <span class="operator">=</span> <span class="literal number integer">0</span>
|
|
<span class="name">position</span> <span class="operator">=</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="name">R</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="name">shape</span><span class="punctuation">,</span> <span class="name">dtype</span><span class="operator">=</span><span class="name">Z</span><span class="operator">.</span><span class="name">dtype</span><span class="punctuation">)</span><span class="operator">*</span><span class="name">fill</span>
|
|
<span class="name">P</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="name builtin">list</span><span class="punctuation">(</span><span class="name">position</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">Rs</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="name builtin">list</span><span class="punctuation">(</span><span class="name">R</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">Zs</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="name builtin">list</span><span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
|
|
<span class="name">R_start</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">shape</span><span class="punctuation">),))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">R_stop</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="name builtin">list</span><span class="punctuation">(</span><span class="name">shape</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">Z_start</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">P</span><span class="operator">-</span><span class="name">Rs</span><span class="operator">//</span><span class="literal number integer">2</span><span class="punctuation">)</span>
|
|
<span class="name">Z_stop</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">P</span><span class="operator">+</span><span class="name">Rs</span><span class="operator">//</span><span class="literal number integer">2</span><span class="punctuation">)</span><span class="operator">+</span><span class="name">Rs</span><span class="operator">%</span><span class="literal number integer">2</span>
|
|
|
|
<span class="name">R_start</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">R_start</span> <span class="operator">-</span> <span class="name">np</span><span class="operator">.</span><span class="name">minimum</span><span class="punctuation">(</span><span class="name">Z_start</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">tolist</span><span class="punctuation">()</span>
|
|
<span class="name">Z_start</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">maximum</span><span class="punctuation">(</span><span class="name">Z_start</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">tolist</span><span class="punctuation">()</span>
|
|
<span class="name">R_stop</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">maximum</span><span class="punctuation">(</span><span class="name">R_start</span><span class="punctuation">,</span> <span class="punctuation">(</span><span class="name">R_stop</span> <span class="operator">-</span> <span class="name">np</span><span class="operator">.</span><span class="name">maximum</span><span class="punctuation">(</span><span class="name">Z_stop</span><span class="operator">-</span><span class="name">Zs</span><span class="punctuation">,</span><span class="literal number integer">0</span><span class="punctuation">)))</span><span class="operator">.</span><span class="name">tolist</span><span class="punctuation">()</span>
|
|
<span class="name">Z_stop</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">minimum</span><span class="punctuation">(</span><span class="name">Z_stop</span><span class="punctuation">,</span><span class="name">Zs</span><span class="punctuation">))</span><span class="operator">.</span><span class="name">tolist</span><span class="punctuation">()</span>
|
|
|
|
<span class="name">r</span> <span class="operator">=</span> <span class="punctuation">[</span><span class="name builtin">slice</span><span class="punctuation">(</span><span class="name">start</span><span class="punctuation">,</span><span class="name">stop</span><span class="punctuation">)</span> <span class="keyword">for</span> <span class="name">start</span><span class="punctuation">,</span><span class="name">stop</span> <span class="operator word">in</span> <span class="name builtin">zip</span><span class="punctuation">(</span><span class="name">R_start</span><span class="punctuation">,</span><span class="name">R_stop</span><span class="punctuation">)]</span>
|
|
<span class="name">z</span> <span class="operator">=</span> <span class="punctuation">[</span><span class="name builtin">slice</span><span class="punctuation">(</span><span class="name">start</span><span class="punctuation">,</span><span class="name">stop</span><span class="punctuation">)</span> <span class="keyword">for</span> <span class="name">start</span><span class="punctuation">,</span><span class="name">stop</span> <span class="operator word">in</span> <span class="name builtin">zip</span><span class="punctuation">(</span><span class="name">Z_start</span><span class="punctuation">,</span><span class="name">Z_stop</span><span class="punctuation">)]</span>
|
|
<span class="name">R</span><span class="punctuation">[</span><span class="name">r</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">Z</span><span class="punctuation">[</span><span class="name">z</span><span class="punctuation">]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">R</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider an array Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14], how to generate an
|
|
array R = [[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Stefan van der Walt</span>
|
|
|
|
<span class="name">Z</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">1</span><span class="punctuation">,</span><span class="literal number integer">15</span><span class="punctuation">,</span><span class="name">dtype</span><span class="operator">=</span><span class="name">uint32</span><span class="punctuation">)</span>
|
|
<span class="name">R</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="literal number integer">11</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">4</span><span class="punctuation">))</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">R</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Compute a matrix rank (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Stefan van der Walt</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">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">10</span><span class="punctuation">,</span><span class="literal number integer">10</span><span class="punctuation">))</span>
|
|
<span class="name">U</span><span class="punctuation">,</span> <span class="name">S</span><span class="punctuation">,</span> <span class="name">V</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">linalg</span><span class="operator">.</span><span class="name">svd</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span> <span class="comment single"># Singular Value Decomposition</span>
|
|
<span class="name">rank</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">sum</span><span class="punctuation">(</span><span class="name">S</span> <span class="operator">></span> <span class="literal number float">1e-10</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to find the most frequent value in an array?</p>
|
|
<pre class="code python literal-block">
|
|
<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">10</span><span class="punctuation">,</span><span class="literal number integer">50</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">bincount</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">argmax</span><span class="punctuation">())</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Extract all the contiguous 3x3 blocks from a random 10x10 matrix (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Chris Barker</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">5</span><span class="punctuation">,(</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="name">n</span> <span class="operator">=</span> <span class="literal number integer">3</span>
|
|
<span class="name">i</span> <span class="operator">=</span> <span class="literal number integer">1</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">]</span><span class="operator">-</span><span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<span class="name">j</span> <span class="operator">=</span> <span class="literal number integer">1</span> <span class="operator">+</span> <span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">-</span><span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">C</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Create a 2D array subclass such that Z[i,j] == Z[j,i] (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Eric O. Lebigot</span>
|
|
<span class="comment single"># Note: only works for 2d array and value setting using indices</span>
|
|
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
|
|
<span class="keyword">def</span> <span class="name function">symetric</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">):</span>
|
|
<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>
|
|
|
|
<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>
|
|
<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>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">S</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a set of p matrices wich shape (n,n) and a set of p vectors with shape (n,1).
|
|
How to compute the sum of of the p matrix products at once? (result has shape (n,1)) (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Stefan van der Walt</span>
|
|
|
|
<span class="name">p</span><span class="punctuation">,</span> <span class="name">n</span> <span class="operator">=</span> <span class="literal number integer">10</span><span class="punctuation">,</span> <span class="literal number integer">20</span>
|
|
<span class="name">M</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="name">p</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">V</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="name">p</span><span class="punctuation">,</span><span class="name">n</span><span class="punctuation">,</span><span class="literal number integer">1</span><span class="punctuation">))</span>
|
|
<span class="name">S</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">tensordot</span><span class="punctuation">(</span><span class="name">M</span><span class="punctuation">,</span> <span class="name">V</span><span class="punctuation">,</span> <span class="name">axes</span><span class="operator">=</span><span class="punctuation">[[</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="literal number integer">2</span><span class="punctuation">],</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="keyword">print</span><span class="punctuation">(</span><span class="name">S</span><span class="punctuation">)</span>
|
|
|
|
<span class="comment single"># It works, because:</span>
|
|
<span class="comment single"># M is (p,n,n)</span>
|
|
<span class="comment single"># V is (p,n,1)</span>
|
|
<span class="comment single"># Thus, summing over the paired axes 0 and 0 (of M and V independently),</span>
|
|
<span class="comment single"># and 2 and 1, to remain with a (n,1) vector.</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a 16x16 array, how to get the block-sum (block size is 4x4)? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Robert Kern</span>
|
|
|
|
<span class="name">Z</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">16</span><span class="punctuation">,</span><span class="literal number integer">16</span><span class="punctuation">)</span>
|
|
<span class="name">k</span> <span class="operator">=</span> <span class="literal number integer">4</span>
|
|
<span class="name">S</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">add</span><span class="operator">.</span><span class="name">reduceat</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">add</span><span class="operator">.</span><span class="name">reduceat</span><span class="punctuation">(</span><span class="name">Z</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="literal number integer">0</span><span class="punctuation">,</span> <span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">],</span> <span class="name">k</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="name">np</span><span class="operator">.</span><span class="name">arange</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">],</span> <span class="name">k</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>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to implement the Game of Life using numpy arrays? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Nicolas Rougier</span>
|
|
|
|
<span class="keyword">def</span> <span class="name function">iterate</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">):</span>
|
|
<span class="comment single"># Count neighbours</span>
|
|
<span class="name">N</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">:</span><span class="operator">-</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">0</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="name">Z</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">:</span><span class="operator">-</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">1</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">Z</span><span class="punctuation">[</span><span class="literal number integer">0</span><span class="punctuation">:</span><span class="operator">-</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">:]</span> <span class="operator">+</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">-</span><span class="literal number integer">2</span><span class="punctuation">]</span> <span class="operator">+</span> <span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">+</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">:</span> <span class="punctuation">,</span><span class="literal number integer">0</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="name">Z</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">:</span> <span class="punctuation">,</span><span class="literal number integer">1</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">Z</span><span class="punctuation">[</span><span class="literal number integer">2</span><span class="punctuation">:</span> <span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">:])</span>
|
|
|
|
<span class="comment single"># Apply rules</span>
|
|
<span class="name">birth</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">N</span><span class="operator">==</span><span class="literal number integer">3</span><span class="punctuation">)</span> <span class="operator">&</span> <span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">-</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">==</span><span class="literal number integer">0</span><span class="punctuation">)</span>
|
|
<span class="name">survive</span> <span class="operator">=</span> <span class="punctuation">((</span><span class="name">N</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="name">N</span><span class="operator">==</span><span class="literal number integer">3</span><span class="punctuation">))</span> <span class="operator">&</span> <span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">-</span><span class="literal number integer">1</span><span class="punctuation">]</span><span class="operator">==</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="operator">...</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">0</span>
|
|
<span class="name">Z</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:</span><span class="operator">-</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="operator">-</span><span class="literal number integer">1</span><span class="punctuation">][</span><span class="name">birth</span> <span class="operator">|</span> <span class="name">survive</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="literal number integer">1</span>
|
|
<span class="keyword">return</span> <span class="name">Z</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">2</span><span class="punctuation">,(</span><span class="literal number integer">50</span><span class="punctuation">,</span><span class="literal number integer">50</span><span class="punctuation">))</span>
|
|
<span class="keyword">for</span> <span class="name">i</span> <span class="operator word">in</span> <span class="name builtin">range</span><span class="punctuation">(</span><span class="literal number integer">100</span><span class="punctuation">):</span> <span class="name">Z</span> <span class="operator">=</span> <span class="name">iterate</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to get the n largest values of an array (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Z</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">10000</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">shuffle</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
<span class="name">n</span> <span class="operator">=</span> <span class="literal number integer">5</span>
|
|
|
|
<span class="comment single"># Slow</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">argsort</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)[</span><span class="operator">-</span><span class="name">n</span><span class="punctuation">:]])</span>
|
|
|
|
<span class="comment single"># Fast</span>
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">argpartition</span><span class="punctuation">(</span><span class="operator">-</span><span class="name">Z</span><span class="punctuation">,</span><span class="name">n</span><span class="punctuation">)[:</span><span class="name">n</span><span class="punctuation">]])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given an arbitrary number of vectors, build the cartesian product (every
|
|
combinations of every item) (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Stefan Van der Walt</span>
|
|
|
|
<span class="keyword">def</span> <span class="name function">cartesian</span><span class="punctuation">(</span><span class="name">arrays</span><span class="punctuation">):</span>
|
|
<span class="name">arrays</span> <span class="operator">=</span> <span class="punctuation">[</span><span class="name">np</span><span class="operator">.</span><span class="name">asarray</span><span class="punctuation">(</span><span class="name">a</span><span class="punctuation">)</span> <span class="keyword">for</span> <span class="name">a</span> <span class="operator word">in</span> <span class="name">arrays</span><span class="punctuation">]</span>
|
|
<span class="name">shape</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name builtin">len</span><span class="punctuation">(</span><span class="name">x</span><span class="punctuation">)</span> <span class="keyword">for</span> <span class="name">x</span> <span class="operator word">in</span> <span class="name">arrays</span><span class="punctuation">)</span>
|
|
|
|
<span class="name">ix</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">indices</span><span class="punctuation">(</span><span class="name">shape</span><span class="punctuation">,</span> <span class="name">dtype</span><span class="operator">=</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="name">ix</span> <span class="operator">=</span> <span class="name">ix</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">arrays</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">T</span>
|
|
|
|
<span class="keyword">for</span> <span class="name">n</span><span class="punctuation">,</span> <span class="name">arr</span> <span class="operator word">in</span> <span class="name builtin">enumerate</span><span class="punctuation">(</span><span class="name">arrays</span><span class="punctuation">):</span>
|
|
<span class="name">ix</span><span class="punctuation">[:,</span> <span class="name">n</span><span class="punctuation">]</span> <span class="operator">=</span> <span class="name">arrays</span><span class="punctuation">[</span><span class="name">n</span><span class="punctuation">][</span><span class="name">ix</span><span class="punctuation">[:,</span> <span class="name">n</span><span class="punctuation">]]</span>
|
|
|
|
<span class="keyword">return</span> <span class="name">ix</span>
|
|
|
|
<span class="keyword">print</span> <span class="punctuation">(</span><span class="name">cartesian</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="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="punctuation">[</span><span class="literal number integer">6</span><span class="punctuation">,</span> <span class="literal number integer">7</span><span class="punctuation">])))</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">How to create a record array from a regular array? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<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 string double">"Hello"</span><span class="punctuation">,</span> <span class="literal number float">2.5</span><span class="punctuation">,</span> <span class="literal number integer">3</span><span class="punctuation">),</span>
|
|
<span class="punctuation">(</span><span class="literal string double">"World"</span><span class="punctuation">,</span> <span class="literal number float">3.6</span><span class="punctuation">,</span> <span class="literal number integer">2</span><span class="punctuation">)])</span>
|
|
<span class="name">R</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">core</span><span class="operator">.</span><span class="name">records</span><span class="operator">.</span><span class="name">fromarrays</span><span class="punctuation">(</span><span class="name">Z</span><span class="operator">.</span><span class="name">T</span><span class="punctuation">,</span>
|
|
<span class="name">names</span><span class="operator">=</span><span class="literal string single">'col1, col2, col3'</span><span class="punctuation">,</span>
|
|
<span class="name">formats</span> <span class="operator">=</span> <span class="literal string single">'S8, f8, i8'</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider a large vector Z, compute Z to the power of 3 using 3 different
|
|
methods (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="name">Author</span><span class="punctuation">:</span> <span class="name">Ryan</span> <span class="name">G</span><span class="operator">.</span>
|
|
|
|
<span class="name">x</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">rand</span><span class="punctuation">(</span><span class="literal number float">5e7</span><span class="punctuation">)</span>
|
|
|
|
<span class="operator">%</span><span class="name">timeit</span> <span class="name">np</span><span class="operator">.</span><span class="name">power</span><span class="punctuation">(</span><span class="name">x</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">)</span>
|
|
<span class="literal number integer">1</span> <span class="name">loops</span><span class="punctuation">,</span> <span class="name">best</span> <span class="name">of</span> <span class="literal number integer">3</span><span class="punctuation">:</span> <span class="literal number integer">574</span> <span class="name">ms</span> <span class="name">per</span> <span class="name">loop</span>
|
|
|
|
<span class="operator">%</span><span class="name">timeit</span> <span class="name">x</span><span class="operator">*</span><span class="name">x</span><span class="operator">*</span><span class="name">x</span>
|
|
<span class="literal number integer">1</span> <span class="name">loops</span><span class="punctuation">,</span> <span class="name">best</span> <span class="name">of</span> <span class="literal number integer">3</span><span class="punctuation">:</span> <span class="literal number integer">429</span> <span class="name">ms</span> <span class="name">per</span> <span class="name">loop</span>
|
|
|
|
<span class="operator">%</span><span class="name">timeit</span> <span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string single">'i,i,i->i'</span><span class="punctuation">,</span><span class="name">x</span><span class="punctuation">,</span><span class="name">x</span><span class="punctuation">,</span><span class="name">x</span><span class="punctuation">)</span>
|
|
<span class="literal number integer">1</span> <span class="name">loops</span><span class="punctuation">,</span> <span class="name">best</span> <span class="name">of</span> <span class="literal number integer">3</span><span class="punctuation">:</span> <span class="literal number integer">244</span> <span class="name">ms</span> <span class="name">per</span> <span class="name">loop</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Consider two arrays A and B of shape (8,3) and (2,2). How to find rows of A
|
|
that contain elements of each row of B regardless of the order of the elements
|
|
in B? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Gabe Schwartz</span>
|
|
|
|
<span class="name">A</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">5</span><span class="punctuation">,(</span><span class="literal number integer">8</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="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">5</span><span class="punctuation">,(</span><span class="literal number integer">2</span><span class="punctuation">,</span><span class="literal number integer">2</span><span class="punctuation">))</span>
|
|
|
|
<span class="name">C</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">A</span><span class="punctuation">[</span><span class="operator">...</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">np</span><span class="operator">.</span><span class="name">newaxis</span><span class="punctuation">]</span> <span class="operator">==</span> <span class="name">B</span><span class="punctuation">)</span>
|
|
<span class="name">rows</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">C</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="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="operator">>=</span> <span class="name">B</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">])</span><span class="operator">.</span><span class="name">nonzero</span><span class="punctuation">()[</span><span class="literal number integer">0</span><span class="punctuation">]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">rows</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering a 10x3 matrix, extract rows with unequal values (e.g. [2,2,3]) (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Robert Kern</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">5</span><span class="punctuation">,(</span><span class="literal number integer">10</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">))</span>
|
|
<span class="name">E</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">logical_and</span><span class="operator">.</span><span class="name">reduce</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">[:,</span><span class="literal number integer">1</span><span class="punctuation">:]</span> <span class="operator">==</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="name">axis</span><span class="operator">=</span><span class="literal number integer">1</span><span class="punctuation">)</span>
|
|
<span class="name">U</span> <span class="operator">=</span> <span class="name">Z</span><span class="punctuation">[</span><span class="operator">~</span><span class="name">E</span><span class="punctuation">]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">U</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Convert a vector of ints into a matrix binary representation (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Warren Weckesser</span>
|
|
|
|
<span class="name">I</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">0</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">15</span><span class="punctuation">,</span> <span class="literal number integer">16</span><span class="punctuation">,</span> <span class="literal number integer">32</span><span class="punctuation">,</span> <span class="literal number integer">64</span><span class="punctuation">,</span> <span class="literal number integer">128</span><span class="punctuation">])</span>
|
|
<span class="name">B</span> <span class="operator">=</span> <span class="punctuation">((</span><span class="name">I</span><span class="operator">.</span><span class="name">reshape</span><span class="punctuation">(</span><span class="operator">-</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="operator">&</span> <span class="punctuation">(</span><span class="literal number integer">2</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">8</span><span class="punctuation">)))</span> <span class="operator">!=</span> <span class="literal number integer">0</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">astype</span><span class="punctuation">(</span><span class="name builtin">int</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">B</span><span class="punctuation">[:,::</span><span class="operator">-</span><span class="literal number integer">1</span><span class="punctuation">])</span>
|
|
|
|
<span class="comment single"># Author: Daniel T. McDonald</span>
|
|
|
|
<span class="name">I</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">0</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">15</span><span class="punctuation">,</span> <span class="literal number integer">16</span><span class="punctuation">,</span> <span class="literal number integer">32</span><span class="punctuation">,</span> <span class="literal number integer">64</span><span class="punctuation">,</span> <span class="literal number integer">128</span><span class="punctuation">],</span> <span class="name">dtype</span><span class="operator">=</span><span class="name">np</span><span class="operator">.</span><span class="name">uint8</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</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>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given a two dimensional array, how to extract unique rows? (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jaime Fernández del Río</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">2</span><span class="punctuation">,(</span><span class="literal number integer">6</span><span class="punctuation">,</span><span class="literal number integer">3</span><span class="punctuation">))</span>
|
|
<span class="name">T</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">ascontiguousarray</span><span class="punctuation">(</span><span class="name">Z</span><span class="punctuation">)</span><span class="operator">.</span><span class="name">view</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">dtype</span><span class="punctuation">((</span><span class="name">np</span><span class="operator">.</span><span class="name">void</span><span class="punctuation">,</span> <span class="name">Z</span><span class="operator">.</span><span class="name">dtype</span><span class="operator">.</span><span class="name">itemsize</span> <span class="operator">*</span> <span class="name">Z</span><span class="operator">.</span><span class="name">shape</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">])))</span>
|
|
<span class="name">_</span><span class="punctuation">,</span> <span class="name">idx</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">T</span><span class="punctuation">,</span> <span class="name">return_index</span><span class="operator">=</span><span class="name builtin pseudo">True</span><span class="punctuation">)</span>
|
|
<span class="name">uZ</span> <span class="operator">=</span> <span class="name">Z</span><span class="punctuation">[</span><span class="name">idx</span><span class="punctuation">]</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">uZ</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering 2 vectors A & B, write the einsum equivalent of inner, outer,
|
|
sum, and mul function (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Alex Riley</span>
|
|
<span class="comment single"># Make sure to read: http://ajcr.net/Basic-guide-to-einsum/</span>
|
|
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string single">'i->'</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">)</span> <span class="comment single"># np.sum(A)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string single">'i,i->i'</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">)</span> <span class="comment single"># A * B</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string single">'i,i'</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">)</span> <span class="comment single"># np.inner(A, B)</span>
|
|
<span class="name">np</span><span class="operator">.</span><span class="name">einsum</span><span class="punctuation">(</span><span class="literal string single">'i,j'</span><span class="punctuation">,</span> <span class="name">A</span><span class="punctuation">,</span> <span class="name">B</span><span class="punctuation">)</span> <span class="comment single"># np.outer(A, B)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Considering a path described by two vectors (X,Y), how to sample it using
|
|
equidistant samples (★★★)?</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Bas Swinckels</span>
|
|
|
|
<span class="name">phi</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">0</span><span class="punctuation">,</span> <span class="literal number integer">10</span><span class="operator">*</span><span class="name">np</span><span class="operator">.</span><span class="name">pi</span><span class="punctuation">,</span> <span class="literal number float">0.1</span><span class="punctuation">)</span>
|
|
<span class="name">a</span> <span class="operator">=</span> <span class="literal number integer">1</span>
|
|
<span class="name">x</span> <span class="operator">=</span> <span class="name">a</span><span class="operator">*</span><span class="name">phi</span><span class="operator">*</span><span class="name">np</span><span class="operator">.</span><span class="name">cos</span><span class="punctuation">(</span><span class="name">phi</span><span class="punctuation">)</span>
|
|
<span class="name">y</span> <span class="operator">=</span> <span class="name">a</span><span class="operator">*</span><span class="name">phi</span><span class="operator">*</span><span class="name">np</span><span class="operator">.</span><span class="name">sin</span><span class="punctuation">(</span><span class="name">phi</span><span class="punctuation">)</span>
|
|
|
|
<span class="name">dr</span> <span class="operator">=</span> <span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">diff</span><span class="punctuation">(</span><span class="name">x</span><span class="punctuation">)</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">diff</span><span class="punctuation">(</span><span class="name">y</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="literal number integer">5</span> <span class="comment single"># segment lengths</span>
|
|
<span class="name">r</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">zeros_like</span><span class="punctuation">(</span><span class="name">x</span><span class="punctuation">)</span>
|
|
<span class="name">r</span><span class="punctuation">[</span><span class="literal number integer">1</span><span class="punctuation">:]</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">cumsum</span><span class="punctuation">(</span><span class="name">dr</span><span class="punctuation">)</span> <span class="comment single"># integrate path</span>
|
|
<span class="name">r_int</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">linspace</span><span class="punctuation">(</span><span class="literal number integer">0</span><span class="punctuation">,</span> <span class="name">r</span><span class="operator">.</span><span class="name">max</span><span class="punctuation">(),</span> <span class="literal number integer">200</span><span class="punctuation">)</span> <span class="comment single"># regular spaced path</span>
|
|
<span class="name">x_int</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">interp</span><span class="punctuation">(</span><span class="name">r_int</span><span class="punctuation">,</span> <span class="name">r</span><span class="punctuation">,</span> <span class="name">x</span><span class="punctuation">)</span> <span class="comment single"># integrate path</span>
|
|
<span class="name">y_int</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">interp</span><span class="punctuation">(</span><span class="name">r_int</span><span class="punctuation">,</span> <span class="name">r</span><span class="punctuation">,</span> <span class="name">y</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Given an integer n and a 2D array X, select from X the rows which can be
|
|
interpreted as draws from a multinomial distribution with n degrees, i.e.,
|
|
the rows which only contain integers and which sum to n. (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Evgeni Burovski</span>
|
|
|
|
<span class="name">X</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">asarray</span><span class="punctuation">([[</span><span class="literal number float">1.0</span><span class="punctuation">,</span> <span class="literal number float">0.0</span><span class="punctuation">,</span> <span class="literal number float">3.0</span><span class="punctuation">,</span> <span class="literal number float">8.0</span><span class="punctuation">],</span>
|
|
<span class="punctuation">[</span><span class="literal number float">2.0</span><span class="punctuation">,</span> <span class="literal number float">0.0</span><span class="punctuation">,</span> <span class="literal number float">1.0</span><span class="punctuation">,</span> <span class="literal number float">1.0</span><span class="punctuation">],</span>
|
|
<span class="punctuation">[</span><span class="literal number float">1.5</span><span class="punctuation">,</span> <span class="literal number float">2.5</span><span class="punctuation">,</span> <span class="literal number float">1.0</span><span class="punctuation">,</span> <span class="literal number float">0.0</span><span class="punctuation">]])</span>
|
|
<span class="name">n</span> <span class="operator">=</span> <span class="literal number integer">4</span>
|
|
<span class="name">M</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">logical_and</span><span class="operator">.</span><span class="name">reduce</span><span class="punctuation">(</span><span class="name">np</span><span class="operator">.</span><span class="name">mod</span><span class="punctuation">(</span><span class="name">X</span><span class="punctuation">,</span> <span class="literal number integer">1</span><span class="punctuation">)</span> <span class="operator">==</span> <span class="literal number integer">0</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>
|
|
<span class="name">M</span> <span class="operator">&=</span> <span class="punctuation">(</span><span class="name">X</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> <span class="operator">==</span> <span class="name">n</span><span class="punctuation">)</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">X</span><span class="punctuation">[</span><span class="name">M</span><span class="punctuation">])</span>
|
|
</pre>
|
|
</li>
|
|
<li><p class="first">Compute bootstrapped 95% confidence intervals for the mean of a 1D array X
|
|
(i.e., resample the elements of an array with replacement N times, compute
|
|
the mean of each sample, and then compute percentiles over the means). (★★★)</p>
|
|
<pre class="code python literal-block">
|
|
<span class="comment single"># Author: Jessica B. Hamrick</span>
|
|
|
|
<span class="name">X</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">randn</span><span class="punctuation">(</span><span class="literal number integer">100</span><span class="punctuation">)</span> <span class="comment single"># random 1D array</span>
|
|
<span class="name">N</span> <span class="operator">=</span> <span class="literal number integer">1000</span> <span class="comment single"># number of bootstrap samples</span>
|
|
<span class="name">idx</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="name">X</span><span class="operator">.</span><span class="name">size</span><span class="punctuation">,</span> <span class="punctuation">(</span><span class="name">N</span><span class="punctuation">,</span> <span class="name">X</span><span class="operator">.</span><span class="name">size</span><span class="punctuation">))</span>
|
|
<span class="name">means</span> <span class="operator">=</span> <span class="name">X</span><span class="punctuation">[</span><span class="name">idx</span><span class="punctuation">]</span><span class="operator">.</span><span class="name">mean</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>
|
|
<span class="name">confint</span> <span class="operator">=</span> <span class="name">np</span><span class="operator">.</span><span class="name">percentile</span><span class="punctuation">(</span><span class="name">means</span><span class="punctuation">,</span> <span class="punctuation">[</span><span class="literal number float">2.5</span><span class="punctuation">,</span> <span class="literal number float">97.5</span><span class="punctuation">])</span>
|
|
<span class="keyword">print</span><span class="punctuation">(</span><span class="name">confint</span><span class="punctuation">)</span>
|
|
</pre>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</body>
|
|
</html>
|