diff --git a/10_Random_sampling.ipynb b/10_Random_sampling.ipynb
index b3fc88f..9ce8516 100644
--- a/10_Random_sampling.ipynb
+++ b/10_Random_sampling.ipynb
@@ -1,301 +1,419 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Random Sampling"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'1.11.2'"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "np.__version__"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "__author__ = 'kyubyong. longinglove@nate.com'"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Simple random data"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q1. Create an array of shape (3, 2) and populate it with random samples from a uniform distribution over [0, 1)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 49,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 0.13879034, 0.71300174],\n",
- " [ 0.08121322, 0.00393554],\n",
- " [ 0.02349471, 0.56677474]])"
- ]
- },
- "execution_count": 49,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q2. Create an array of shape (1000, 1000) and populate it with random samples from a standard normal distribution. And verify that the mean and standard deviation is close enough to 0 and 1 repectively."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-0.00110028519551\n",
- "0.999683483393\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q3. Create an array of shape (3, 2) and populate it with random integers ranging from 0 to 3 (inclusive) from a discrete uniform distribution."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 44,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[1, 3],\n",
- " [3, 0],\n",
- " [0, 0]])"
- ]
- },
- "execution_count": 44,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q4. Extract 1 elements from x randomly such that each of them would be associated with probabilities .3, .5, .2. Then print the result 10 times."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "5 out of 10\n",
- "2 out of 10\n",
- "3 out of 10\n",
- "5 out of 10\n",
- "2 out of 10\n",
- "5 out of 10\n",
- "2 out of 10\n",
- "2 out of 10\n",
- "2 out of 10\n",
- "5 out of 10\n"
- ]
- }
- ],
- "source": [
- "x = [b'3 out of 10', b'5 out of 10', b'2 out of 10']\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q5. Extract 3 different integers from 0 to 9 randomly with the same probabilities."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 66,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([5, 4, 0])"
- ]
- },
- "execution_count": 66,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Permutations"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q6. Shuffle numbers between 0 and 9 (inclusive)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 86,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[2 3 8 4 5 1 0 6 9 7]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 88,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[5 2 7 4 1 0 6 8 9 3]\n"
- ]
- }
- ],
- "source": [
- "# Or\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Random generator"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q7. Assign number 10 to the seed of the random generator so that you can get the same value next time."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 91,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "3UDDkN1hTEKQ"
+ },
+ "source": [
+ "# Random Sampling"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "aSKOlci4T2N8"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": true,
+ "id": "MV0iM2fXTEKR"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "xlXhykXZTEKS",
+ "outputId": "3b543690-093a-4cb9-b199-d90962f14885",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'1.25.2'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 2
+ }
+ ],
+ "source": [
+ "np.__version__"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "id": "qpr7mb4kTEKS"
+ },
+ "outputs": [],
+ "source": [
+ "__author__ = 'kyubyong. longinglove@nate.com'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "StDpKS5rTEKS"
+ },
+ "source": [
+ "## Simple random data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "438LHI7wTEKS"
+ },
+ "source": [
+ "Q1. Create an array of shape (3, 2) and populate it with random samples from a uniform distribution over [0, 1)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "id": "2jgJ8bfxTEKT",
+ "outputId": "19209aa1-d2cb-4853-b21f-cd26f6bcbefc",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[0.44973262, 0.20192478],\n",
+ " [0.88800608, 0.50218322],\n",
+ " [0.16239423, 0.57113706]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ],
+ "source": [
+ "np.random.rand(3, 2)\n",
+ "# Or np.random.random((3,2))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "UULK_Qg6TEKT"
+ },
+ "source": [
+ "Q2. Create an array of shape (1000, 1000) and populate it with random samples from a standard normal distribution. And verify that the mean and standard deviation is close enough to 0 and 1 repectively."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "iH0crU22TEKT",
+ "outputId": "82771d61-fdf0-4cb2-a9fa-c7371952469c",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "-0.0022732807185111437\n",
+ "1.0005348176435038\n"
+ ]
+ }
+ ],
+ "source": [
+ "out1 = np.random.randn(1000, 1000)\n",
+ "out2 = np.random.standard_normal((1000, 1000))\n",
+ "out3 = np.random.normal(loc=0.0, scale=1.0, size=(1000, 1000))\n",
+ "assert np.allclose(np.mean(out1), np.mean(out2), atol=0.1)\n",
+ "assert np.allclose(np.mean(out1), np.mean(out3), atol=0.1)\n",
+ "assert np.allclose(np.std(out1), np.std(out2), atol=0.1)\n",
+ "assert np.allclose(np.std(out1), np.std(out3), atol=0.1)\n",
+ "print (np.mean(out3))\n",
+ "print (np.std(out1))\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "X63lz-iWTEKT"
+ },
+ "source": [
+ "Q3. Create an array of shape (3, 2) and populate it with random integers ranging from 0 to 3 (inclusive) from a discrete uniform distribution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "id": "O0_TtaDiTEKT",
+ "outputId": "ca70f24a-6d5c-48f7-d953-d2651fea24ff",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[1, 0],\n",
+ " [3, 3],\n",
+ " [2, 0]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ],
+ "source": [
+ "np.random.randint(0, 4, (3, 2))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Su5AzWiWTEKT"
+ },
+ "source": [
+ "Q4. Extract 1 elements from x randomly such that each of them would be associated with probabilities .3, .5, .2. Then print the result 10 times."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": true,
+ "id": "O_io_w9UTEKT"
+ },
+ "outputs": [],
+ "source": [
+ "x = [b'3 out of 10', b'5 out of 10', b'2 out of 10']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "id": "PLdinAZBTEKT",
+ "outputId": "9a6eb038-0d46-425e-a81d-2e7d87f1573e",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "b'3 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'5 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'5 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'3 out of 10'\n",
+ "b'5 out of 10'\n"
+ ]
+ }
+ ],
+ "source": [
+ "for _ in range(10):\n",
+ " print (np.random.choice(x, p=[.3, .5, .2]))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8DvK_TVLTEKU"
+ },
+ "source": [
+ "Q5. Extract 3 different integers from 0 to 9 randomly with the same probabilities."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "id": "OOi-L3wLTEKU",
+ "outputId": "6b4fe959-a2b3-4afa-9cc4-dcfb84ebe1e9",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([6, 3, 5])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ],
+ "source": [
+ "np.random.choice(10, 3, replace=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fGsBAULfTEKU"
+ },
+ "source": [
+ "## Permutations"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "7QPzXLXWTEKU"
+ },
+ "source": [
+ "Q6. Shuffle numbers between 0 and 9 (inclusive)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "vOSkQ5ctTEKU",
+ "outputId": "b3c61a66-09f8-42f8-8cf4-795293726722",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[2 1 4 3 5 6 0 8 9 7]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(10)\n",
+ "np.random.shuffle(x)\n",
+ "print (x)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "id": "hQikPcZCTEKU",
+ "outputId": "bbefc485-49a0-43bd-bef9-88a8826e634c",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[3 5 6 9 2 4 0 1 8 7]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Or\n",
+ "print (np.random.permutation(10))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "b4uy8WTETEKU"
+ },
+ "source": [
+ "## Random generator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "AZwnSthyTEKU"
+ },
+ "source": [
+ "Q7. Assign number 10 to the seed of the random generator so that you can get the same value next time."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "collapsed": true,
+ "id": "XVgU0imGTEKU"
+ },
+ "outputs": [],
+ "source": [
+ "np.random.seed(10)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 2",
+ "language": "python",
+ "name": "python2"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.10"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/12_Sorting_searching_and_counting.ipynb b/12_Sorting_searching_and_counting.ipynb
index bbdda65..1149767 100644
--- a/12_Sorting_searching_and_counting.ipynb
+++ b/12_Sorting_searching_and_counting.ipynb
@@ -1,444 +1,585 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Soring, searching, and counting"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'1.11.2'"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "np.__version__"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "author = 'kyubyong. longinglove@nate.com'"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Sorting"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q1. Sort x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[1 4]\n",
- " [1 3]]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([[1,4],[3,1]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q2. Sort pairs of surnames and first names and return their indices. (first by surname, then by name)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[1 2 0]\n"
- ]
- }
- ],
- "source": [
- "surnames = ('Hertz', 'Galilei', 'Hertz')\n",
- "first_names = ('Heinrich', 'Galileo', 'Gustav')\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q3. Get the indices that would sort x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[0 1]\n",
- " [1 0]]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([[1,4],[3,1]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q4. Create an array such that its fifth element would be the same as the element of sorted x, and it divide other elements by their value."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 48,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = [5 1 6 3 9 8 2 7 4 0]\n",
- "\n",
- "Check the fifth element of this new array is 5, the first four elements are all smaller than 5, and 6th through the end are bigger than 5\n",
- "[2 0 4 3 1 5 8 7 6 9]\n"
- ]
- }
- ],
- "source": [
- "x = np.random.permutation(10)\n",
- "print \"x =\", x\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q5. Create the indices of an array such that its third element would be the same as the element of sorted x, and it divide other elements by their value."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 56,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = [2 8 3 7 5 6 4 0 9 1]\n",
- "partitioned = [0 1 2 3 4 5 8 6 9 7]\n",
- "indices = [0 1 2 3 4 5 8 6 9 7]\n"
- ]
- }
- ],
- "source": [
- "x = np.random.permutation(10)\n",
- "print \"x =\", x\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Searching"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q6. Get the maximum and minimum values and their indices of x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 78,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x = [[0 5 9 8 2]\n",
- " [3 7 4 1 6]]\n",
- "maximum values = [9 7]\n",
- "max indices = [2 1]\n",
- "minimum values = [0 1]\n",
- "min indices = [0 3]\n"
- ]
- }
- ],
- "source": [
- "x = np.random.permutation(10).reshape(2, 5)\n",
- "print \"x =\", x\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q7. Get the maximum and minimum values and their indices of x along the second axis, ignoring NaNs."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 79,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "maximum values ignoring NaNs = [ 4. 3.]\n",
- "max indices = [1 0]\n",
- "minimum values ignoring NaNs = [ 4. 2.]\n",
- "min indices = [1 1]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([[np.nan, 4], [3, 2]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q8. Get the values and indices of the elements that are bigger than 2 in x.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 113,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Values bigger than 2 = [3 3 5]\n",
- "Their indices are (array([0, 1, 1], dtype=int64), array([2, 1, 2], dtype=int64))\n"
- ]
- }
- ],
- "source": [
- "x = np.array([[1, 2, 3], [1, 3, 5]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q9. Get the indices of the elements that are bigger than 2 in the flattend x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 100,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0 1 2 3 4 5]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([[1, 2, 3], [1, 3, 5]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q10. Check the elements of x and return 0 if it is less than 0, otherwise the element itself."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 105,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[0 0 0]\n",
- " [0 0 0]\n",
- " [1 2 3]]\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(-5, 4).reshape(3, 3)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q11. Get the indices where elements of y should be inserted to x to maintain order."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 109,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([0, 2, 1, 3], dtype=int64)"
- ]
- },
- "execution_count": 109,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = [1, 3, 5, 7, 9]\n",
- "y = [0, 4, 2, 6]\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Counting"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q12. Get the number of nonzero elements in x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 120,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "5\n"
- ]
- }
- ],
- "source": [
- "x = [[0,1,7,0,0],[3,0,0,2,19]]\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "d40ozj1nUO1B"
+ },
+ "source": [
+ "# Soring, searching, and counting"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "id": "5RZBdgSYUO1C"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "miR79Z_GUO1D",
+ "outputId": "ad7dabaa-ce68-4524-8187-93965d83c8d9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'1.25.2'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ],
+ "source": [
+ "np.__version__"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "collapsed": true,
+ "id": "bCyOimyAUO1E"
+ },
+ "outputs": [],
+ "source": [
+ "author = 'kyubyong. longinglove@nate.com'"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "u0mXnkMEUO1E"
+ },
+ "source": [
+ "## Sorting"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1Et9DMSXUO1E"
+ },
+ "source": [
+ "Q1. Sort x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "id": "KmWQaTnAUO1E",
+ "outputId": "9a32fe7d-ee3d-4be7-8d8a-51dcf4594fcd",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[1 4]\n",
+ " [1 3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1,4],[3,1]])\n",
+ "out = np.sort(x, axis=1)\n",
+ "x.sort(axis=1)\n",
+ "assert np.array_equal(out, x)\n",
+ "print (out)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "MGRLgY8rUO1E"
+ },
+ "source": [
+ "Q2. Sort pairs of surnames and first names and return their indices. (first by surname, then by name)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "id": "NP781l5OUO1E",
+ "outputId": "606b15d1-f470-43ce-ba74-f46e47a947f1",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[1 2 0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "surnames = ('Hertz', 'Galilei', 'Hertz')\n",
+ "first_names = ('Heinrich', 'Galileo', 'Gustav')\n",
+ "print (np.lexsort((first_names, surnames)))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ZYX_0-g5UO1E"
+ },
+ "source": [
+ "Q3. Get the indices that would sort x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "id": "v8RoX0vgUO1E",
+ "outputId": "5a4a6a26-f462-4442-d062-249ad05ac966",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[0 1]\n",
+ " [1 0]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1,4],[3,1]])\n",
+ "out = np.argsort(x, axis=1)\n",
+ "print (out)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "OyKb0aomUO1F"
+ },
+ "source": [
+ "Q4. Create an array such that its fifth element would be the same as the element of sorted x, and it divide other elements by their value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "id": "ZQoeKKftUO1F",
+ "outputId": "ca41f57f-209f-496f-88ef-47fc9b92ddfb",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x = [8 0 2 6 4 9 3 5 7 1]\n",
+ "\n",
+ "Check the fifth element of this new array is 5, the first four elements are all smaller than 5, and 6th through the end are bigger than 5\n",
+ "\n",
+ "[0 1 2 3 4 5 6 7 8 9]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.random.permutation(10)\n",
+ "print (\"x =\", x)\n",
+ "print (\"\\nCheck the fifth element of this new array is 5, the first four elements are all smaller than 5, and 6th through the end are bigger than 5\\n\")\n",
+ "out = np.partition(x, 5)\n",
+ "x.partition(5) # in-place equivalent\n",
+ "assert np.array_equal(x, out)\n",
+ "print (out)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HXu91CQEUO1F"
+ },
+ "source": [
+ "Q5. Create the indices of an array such that its third element would be the same as the element of sorted x, and it divide other elements by their value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "id": "zJy7giZ8UO1F",
+ "outputId": "19ba1067-b491-4a9c-dcac-d418eee06245",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x = [8 1 4 9 0 3 2 5 7 6]\n",
+ "partitioned = [1 2 0 3 5 4 6 9 7 8]\n",
+ "indices = [1 2 0 3 5 4 6 9 7 8]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.random.permutation(10)\n",
+ "print (\"x =\", x)\n",
+ "partitioned = np.partition(x, 3)\n",
+ "indices = np.argpartition(x, 3)\n",
+ "print (\"partitioned =\", partitioned)\n",
+ "print (\"indices =\", partitioned)\n",
+ "assert np.array_equiv(x[indices], partitioned)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "xBoIeHcqUO1F"
+ },
+ "source": [
+ "## Searching"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-N81qZP4UO1F"
+ },
+ "source": [
+ "Q6. Get the maximum and minimum values and their indices of x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "id": "qi8fIo3DUO1F",
+ "outputId": "3a1f9543-8a03-4cec-cc96-b4ebc0215257",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x = [[4 1 3 5 7]\n",
+ " [6 8 0 9 2]]\n",
+ "maximum values = [7 9]\n",
+ "max indices = [4 3]\n",
+ "minimum values = [1 0]\n",
+ "min indices = [1 2]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.random.permutation(10).reshape(2, 5)\n",
+ "print (\"x =\", x)\n",
+ "print (\"maximum values =\", np.max(x, 1))\n",
+ "print (\"max indices =\", np.argmax(x, 1))\n",
+ "print (\"minimum values =\", np.min(x, 1))\n",
+ "print (\"min indices =\", np.argmin(x, 1))\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "vA5ewD44UO1F"
+ },
+ "source": [
+ "Q7. Get the maximum and minimum values and their indices of x along the second axis, ignoring NaNs."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "id": "C5nSbXnKUO1F",
+ "outputId": "088bdc38-d492-4f1f-eda7-984c11a5b618",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "maximum values ignoring NaNs = [4. 3.]\n",
+ "max indices = [1 0]\n",
+ "minimum values ignoring NaNs = [4. 2.]\n",
+ "min indices = [1 1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[np.nan, 4], [3, 2]])\n",
+ "print (\"maximum values ignoring NaNs =\", np.nanmax(x, 1))\n",
+ "print (\"max indices =\", np.nanargmax(x, 1))\n",
+ "print (\"minimum values ignoring NaNs =\", np.nanmin(x, 1))\n",
+ "print (\"min indices =\", np.nanargmin(x, 1))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Ydj_yENFUO1F"
+ },
+ "source": [
+ "Q8. Get the values and indices of the elements that are bigger than 2 in x.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "id": "j6dL4g3EUO1F",
+ "outputId": "f08eea4f-6c31-42e0-bafa-eff2d1100906",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Values bigger than 2 = [3 3 5]\n",
+ "Their indices are (array([0, 1, 1]), array([2, 1, 2]))\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [1, 3, 5]])\n",
+ "print (\"Values bigger than 2 =\", x[x>2])\n",
+ "print (\"Their indices are \", np.nonzero(x > 2))\n",
+ "assert np.array_equiv(x[x>2], x[np.nonzero(x > 2)])\n",
+ "assert np.array_equiv(x[x>2], np.extract(x > 2, x))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1klOlA0CUO1G"
+ },
+ "source": [
+ "Q9. Get the indices of the elements that are bigger than 2 in the flattend x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "scrolled": true,
+ "id": "_l9pNH-tUO1G",
+ "outputId": "26dc41fe-3b35-4115-f96a-993b512ef927",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[2 4 5]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [1, 3, 5]])\n",
+ "print (np.flatnonzero(x>2))\n",
+ "assert np.array_equiv(np.flatnonzero(x), x.ravel().nonzero())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "5g1tUU71UO1G"
+ },
+ "source": [
+ "Q10. Check the elements of x and return 0 if it is less than 0, otherwise the element itself."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "id": "sc95qheEUO1G",
+ "outputId": "f8ae5346-df48-4983-8871-1d01684554cf",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[0 0 0]\n",
+ " [0 0 0]\n",
+ " [1 2 3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(-5, 4).reshape(3, 3)\n",
+ "print (np.where(x <0, 0, x))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "0ZWwG-LaUO1G"
+ },
+ "source": [
+ "Q11. Get the indices where elements of y should be inserted to x to maintain order."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "id": "bukmJRHKUO1G",
+ "outputId": "d13ddc0e-381f-4412-c07e-388ffe8b7172",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([0, 2, 1, 3])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ }
+ ],
+ "source": [
+ "x = [1, 3, 5, 7, 9]\n",
+ "y = [0, 4, 2, 6]\n",
+ "np.searchsorted(x, y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HroFrh6BUO1G"
+ },
+ "source": [
+ "## Counting"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "5gKmeyw0UO1G"
+ },
+ "source": [
+ "Q12. Get the number of nonzero elements in x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "id": "2xPjEAauUO1G",
+ "outputId": "cf451ff0-8e42-4790-e59b-b0af1d863404",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "5\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = [[0,1,7,0,0],[3,0,0,2,19]]\n",
+ "print (np.count_nonzero(x))\n",
+ "assert np.count_nonzero(x) == len(x[x!=0])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "collapsed": true,
+ "id": "vB98uHFxUO1G"
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.2"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/13_Statistics.ipynb b/13_Statistics.ipynb
index b5cb14a..f80fcd3 100644
--- a/13_Statistics.ipynb
+++ b/13_Statistics.ipynb
@@ -1,579 +1,743 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Statistics"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "__author__ = \"kyubyong. kbpark.linguist@gmail.com\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'1.11.3'"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "np.__version__"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Order statistics"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q1. Return the minimum value of x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [[0 1]\n",
- " [2 3]]\n",
- "ans=\n",
- " [0 2]\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(4).reshape((2, 2))\n",
- "print(\"x=\\n\", x)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q2. Return the maximum value of x along the second axis. Reduce the second axis to the dimension with size one."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [[0 1]\n",
- " [2 3]]\n",
- "ans=\n",
- " [[1]\n",
- " [3]]\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(4).reshape((2, 2))\n",
- "print(\"x=\\n\", x)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q3. Calcuate the difference between the maximum and the minimum of x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [[0 1 2 3 4]\n",
- " [5 6 7 8 9]]\n",
- "ans=\n",
- " [4 4]\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(10).reshape((2, 5))\n",
- "print(\"x=\\n\", x)\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q4. Compute the 75th percentile of x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 30,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [[ 1 2 3 4 5]\n",
- " [ 6 7 8 9 10]]\n",
- "ans=\n",
- " [ 4. 9.]\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(1, 11).reshape((2, 5))\n",
- "print(\"x=\\n\", x)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Averages and variances"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q5. Compute the median of flattened x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [[1 2 3]\n",
- " [4 5 6]\n",
- " [7 8 9]]\n",
- "ans=\n",
- " 5.0\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(1, 10).reshape((3, 3))\n",
- "print(\"x=\\n\", x)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q6. Compute the weighted average of x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "2.66666666667\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(5)\n",
- "weights = np.arange(1, 6)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q7. Compute the mean, standard deviation, and variance of x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 72,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "x=\n",
- " [0 1 2 3 4]\n",
- "mean=\n",
- " 2.0\n",
- "std=\n",
- " 1.41421356237\n",
- "variance=\n",
- " 2.0\n"
- ]
- }
- ],
- "source": [
- "x = np.arange(5)\n",
- "print(\"x=\\n\",x)\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Correlating"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q8. Compute the covariance matrix of x and y."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 82,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [[ 1. -1.]\n",
- " [-1. 1.]]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([0, 1, 2])\n",
- "y = np.array([2, 1, 0])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q9. In the above covariance matrix, what does the -1 mean?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q10. Compute Pearson product-moment correlation coefficients of x and y."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 87,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [[ 1. 0.92857143]\n",
- " [ 0.92857143 1. ]]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([0, 1, 3])\n",
- "y = np.array([2, 4, 5])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q11. Compute cross-correlation of x and y."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 90,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [19]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([0, 1, 3])\n",
- "y = np.array([2, 4, 5])\n",
- "\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Histograms"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q12. Compute the histogram of x against the bins."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 105,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " (array([2, 3, 1], dtype=int64), array([0, 1, 2, 3]))\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "x = np.array([0.5, 0.7, 1.0, 1.2, 1.3, 2.1])\n",
- "bins = np.array([0, 1, 2, 3])\n",
- "print(\"ans=\\n\", ...)\n",
- "\n",
- "import matplotlib.pyplot as plt\n",
- "%matplotlib inline\n",
- "plt.hist(x, bins=bins)\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q13. Compute the 2d histogram of x and y."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 127,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [[ 3. 0. 0. 0.]\n",
- " [ 0. 2. 0. 0.]\n",
- " [ 0. 0. 1. 1.]]\n"
- ]
- },
- {
- "data": {
- "image/png": "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\nccIrqwsyszzmVpyZ5TG3Ypp6QScAEXEvMApcV7SxGPgasGK2FUZHR+l0OpMea9asYd++fZPWO3jw\nIJ1OZ9r2W7ZsYc+ePZOWjY2N0el0OHny5KTlO3bsYOfOnZOWnThxgk6nM+0rud27d08bdz0+Pk6n\n05l2975ut8umTZum1bZhw4ZK9mPPnj2LYj8W8vNYvnz5otgPWNjPA1gU+7GQn8fy5csXxX7Awn4e\ny5cvXxT7AeV/Ht1u97m/jSMjI3Q6HbZu3TptmzJU/s3FoLF4A3BtSuk7me9xEPhJSunNZ3nNby4k\nScpQ1TcXlY4WiYiPATcBHeCfIuKCwUs/Tik9O1jnA8C/OXPKIyLuAL4L/D1wLvAO4HXA66usVZIk\nlaPq0yLvAl4MPAx8f8Lj9yes83LgwgnPXwh8CPjmYLvfBK5PKT1cca2tc7avrjU7M8tjbsWZWR5z\nq4eq57mYs3lJKW2a8vwe4J7KitJzxsfHh11C45hZHnMrzszymFs9LNhokap4zYUkSXkaPVpEkiS1\nh82FJEkqlc1Fi00df625mVkecyvOzPKYWz3YXLTY5s2bh11C45hZHnMrzszymFs92Fy02J133jns\nEhrHzPKYW3Fmlsfc6sHmosUcXVOcmeUxt+LMLI+51YPNhSRJKpXNhSRJKpXNRYtNvYuf5mZmecyt\nODPLY271YHPRYmNjpU3G1hpmlsfcijOzPOZWD07/LUlSSzn9tyRJagSbC0mSVCqbC0mSVCqbixbr\ndDrDLqFxzCyPuRVnZnnMrR5sLlrstttuG3YJjWNmecytODPLY2714GgRSZJaytEikiSpEWwuJElS\nqWwuWmzfvn3DLqFxzCyPuRVnZnnMrR5sLlqs2+0Ou4TGMbM85lacmeUxt3rwgk5JklrKCzolSVIj\n2FxIkqRS2VxIkqRS2Vy02KZNm4ZdQuOYWR5zK87M8phbPdhctNi6deuGXULjmFkecyvOzPKYWz1U\nOlokIv4IeCNwCfBT4CvA+1JKvTm2uw74EPDrwAngf00pfXqGdR0tIklShqaOFnktsBu4ElgLvAA4\nGBG/PNMGEXER8HngC8ArgY8Cn4yI11dcqyRJKsE5Vb55Sml04vOIeDvwNHAFcHiGzd4NfCeltH3w\n/NsR8bvAVuBvKipVktRwvV6P48ePs2LFClauXDnsclptoa+5eCmQgFOzrHMVcGjKsgPAmqqKaqvD\n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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "xedges = [0, 1, 2, 3]\n",
- "yedges = [0, 1, 2, 3, 4]\n",
- "x = np.array([0, 0.1, 0.2, 1., 1.1, 2., 2.1])\n",
- "y = np.array([0, 0.1, 0.2, 1., 1.1, 2., 3.3])\n",
- "...\n",
- "\n",
- "plt.scatter(x, y)\n",
- "plt.grid()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q14. Count number of occurrences of 0 through 7 in x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 129,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [1 3 1 1 0 0 0 1]\n"
- ]
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "neMWZTOiV9eP"
+ },
+ "source": [
+ "# Statistics"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": true,
+ "id": "MOVdfXuJV9eQ"
+ },
+ "outputs": [],
+ "source": [
+ "__author__ = \"kyubyong. kbpark.linguist@gmail.com\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": true,
+ "id": "s9Uy9Z9SV9eR"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "id": "SfrdAsOiV9eR",
+ "outputId": "794aac59-f3ca-46eb-b977-383dcae441dd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'1.25.2'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ],
+ "source": [
+ "np.__version__"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "lKbr1lPfV9eR"
+ },
+ "source": [
+ "## Order statistics"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Zjrpa58QV9eR"
+ },
+ "source": [
+ "Q1. Return the minimum value of x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "id": "Jbqz-b2CV9eR",
+ "outputId": "9820696a-382d-47de-94b6-5986198f7b9d",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [[0 1]\n",
+ " [2 3]]\n",
+ "ans=\n",
+ " [0 2]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(4).reshape((2, 2))\n",
+ "print(\"x=\\n\", x)\n",
+ "print(\"ans=\\n\", np.amin(x, 1))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ruBraKn-V9eS"
+ },
+ "source": [
+ "Q2. Return the maximum value of x along the second axis. Reduce the second axis to the dimension with size one."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "PxmDvcy4V9eS",
+ "outputId": "ee2ebb99-d177-49ef-c9b2-29a8e660890a",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [[0 1]\n",
+ " [2 3]]\n",
+ "ans=\n",
+ " [[1]\n",
+ " [3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(4).reshape((2, 2))\n",
+ "print(\"x=\\n\", x)\n",
+ "print(\"ans=\\n\", np.amax(x, 1, keepdims=True))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "BuJdKN8pV9eS"
+ },
+ "source": [
+ "Q3. Calcuate the difference between the maximum and the minimum of x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "id": "cIyNeLR3V9eS",
+ "outputId": "d43c93ca-65e6-4767-a563-ba432001d550",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [[0 1 2 3 4]\n",
+ " [5 6 7 8 9]]\n",
+ "ans=\n",
+ " [4 4]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(10).reshape((2, 5))\n",
+ "print(\"x=\\n\", x)\n",
+ "\n",
+ "out1 = np.ptp(x, 1)\n",
+ "out2 = np.amax(x, 1) - np.amin(x, 1)\n",
+ "assert np.allclose(out1, out2)\n",
+ "print(\"ans=\\n\", out1)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "WxdfsuhaV9eS"
+ },
+ "source": [
+ "Q4. Compute the 75th percentile of x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "id": "f9apWkVbV9eS",
+ "outputId": "e75e5b56-d298-43dd-aa88-a4d776089951",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [[ 1 2 3 4 5]\n",
+ " [ 6 7 8 9 10]]\n",
+ "ans=\n",
+ " [4. 9.]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(1, 11).reshape((2, 5))\n",
+ "print(\"x=\\n\", x)\n",
+ "\n",
+ "print(\"ans=\\n\", np.percentile(x, 75, 1))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "R-iQvsB8V9eS"
+ },
+ "source": [
+ "## Averages and variances"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HRoI3eoRV9eS"
+ },
+ "source": [
+ "Q5. Compute the median of flattened x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "id": "H8du7M2qV9eS",
+ "outputId": "8ea933c5-7eb3-427a-ba76-e049c86c5b9b",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [[1 2 3]\n",
+ " [4 5 6]\n",
+ " [7 8 9]]\n",
+ "ans=\n",
+ " 5.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(1, 10).reshape((3, 3))\n",
+ "print(\"x=\\n\", x)\n",
+ "\n",
+ "print(\"ans=\\n\", np.median(x))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "MRXmGKSnV9eS"
+ },
+ "source": [
+ "Q6. Compute the weighted average of x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "id": "WhPX2iHMV9eS",
+ "outputId": "16f1a50b-1e23-4a86-f09d-0a77926e740e",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "2.6666666666666665\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(5)\n",
+ "weights = np.arange(1, 6)\n",
+ "\n",
+ "out1 = np.average(x, weights=weights)\n",
+ "out2 = (x*(weights/weights.sum())).sum()\n",
+ "assert np.allclose(out1, out2)\n",
+ "print(out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "EBWXE-L1V9eT"
+ },
+ "source": [
+ "Q7. Compute the mean, standard deviation, and variance of x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "6pDhG0sTV9eT",
+ "outputId": "ad7c58ac-0bd1-4db4-bba3-60677b07f2f1",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "x=\n",
+ " [0 1 2 3 4]\n",
+ "mean=\n",
+ " 2.0\n",
+ "std=\n",
+ " 1.4142135623730951\n",
+ "variance=\n",
+ " 2.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(5)\n",
+ "print(\"x=\\n\",x)\n",
+ "\n",
+ "out1 = np.mean(x)\n",
+ "out2 = np.average(x)\n",
+ "assert np.allclose(out1, out2)\n",
+ "print(\"mean=\\n\", out1)\n",
+ "\n",
+ "out3 = np.std(x)\n",
+ "out4 = np.sqrt(np.mean((x - np.mean(x)) ** 2 ))\n",
+ "assert np.allclose(out3, out4)\n",
+ "print(\"std=\\n\", out3)\n",
+ "\n",
+ "out5 = np.var(x)\n",
+ "out6 = np.mean((x - np.mean(x)) ** 2 )\n",
+ "assert np.allclose(out5, out6)\n",
+ "print(\"variance=\\n\", out5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "69YVjkvnV9eT"
+ },
+ "source": [
+ "## Correlating"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ey29dSRQV9eT"
+ },
+ "source": [
+ "Q8. Compute the covariance matrix of x and y."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "id": "ALsRZh7OV9eT",
+ "outputId": "39380b0a-5261-4c9f-f6ac-45df167c5ac8",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [[ 1. -1.]\n",
+ " [-1. 1.]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 2])\n",
+ "y = np.array([2, 1, 0])\n",
+ "\n",
+ "print(\"ans=\\n\", np.cov(x, y))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "08PqEfEvV9eT"
+ },
+ "source": [
+ "Q9. In the above covariance matrix, what does the -1 mean?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gQbQARW6V9eT"
+ },
+ "source": [
+ "It means `x` and `y` correlate perfectly in opposite directions."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XkZDHD5TV9eT"
+ },
+ "source": [
+ "Q10. Compute Pearson product-moment correlation coefficients of x and y."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "id": "Xj89Y1z2V9eT",
+ "outputId": "c6b10d2e-f0d8-4d59-eb14-1eabf593167b",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [[1. 0.92857143]\n",
+ " [0.92857143 1. ]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 3])\n",
+ "y = np.array([2, 4, 5])\n",
+ "\n",
+ "print(\"ans=\\n\", np.corrcoef(x, y))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "BRXqj1zuV9eT"
+ },
+ "source": [
+ "Q11. Compute cross-correlation of x and y."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "id": "oDJp8rf5V9eU",
+ "outputId": "dcdc16ab-51c3-4a79-8da0-e56fd091b0be",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [19]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 3])\n",
+ "y = np.array([2, 4, 5])\n",
+ "\n",
+ "print(\"ans=\\n\", np.correlate(x, y))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "MIC8zlaSV9eU"
+ },
+ "source": [
+ "## Histograms"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "YFaPoZq1V9eU"
+ },
+ "source": [
+ "Q12. Compute the histogram of x against the bins."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "id": "5jTOJgvjV9eU",
+ "outputId": "07d14749-c60f-486d-9db9-114372ed00a3",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 465
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " (array([2, 3, 1]), array([0, 1, 2, 3]))\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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y2LSpElRV1cXERHf+ta3Yu7cuTFt2rT49a9/HY888kicPHky7rvvvkF+KADAcJRXjDz++OMREbFgwYIe+5955pn467/+64iIOHXqVIwZ8/sTLu+//37cf//90dLSEtdcc03MmjUrDhw4EDNmzLiwlQMAI8KAL2C9mPp7AQxcSlzAylBwASvDSX/fv/1vGgAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABIKq8Yqauri9tuuy3GjRsXEyZMiNra2jhx4sSnznv++efjhhtuiKKiorjlllvipZdeGvCCAYCRJa8Y2bdvX6xcuTLeeOONqK+vjw8//DDuuuuuaG9v73POgQMHYunSpbFixYo4cuRI1NbWRm1tbRw7duyCFw8ADH8FWZZlA5387rvvxoQJE2Lfvn3xxS9+sdcxS5Ysifb29ti1a1f3vrlz50ZVVVVs3ry5X/eTy+WipKQk2traori4eKDLhYtqytoXUy+BEegXDy9OvQTot/6+f1/QNSNtbW0RETF+/Pg+xzQ2NsbChQt77KupqYnGxsYLuWsAYIS4fKATu7q6YvXq1XH77bfHzTff3Oe4lpaWKC0t7bGvtLQ0Wlpa+pzT0dERHR0d3T/ncrmBLhMAuMQNOEZWrlwZx44di/379w/meiLiowtlN2zYMOi32xun0gEgrQF9TLNq1arYtWtXvPrqqzF58uTzji0rK4vW1tYe+1pbW6OsrKzPOevWrYu2trbu7fTp0wNZJgAwDOQVI1mWxapVq2L79u2xZ8+emDp16qfOqa6ujoaGhh776uvro7q6us85hYWFUVxc3GMDAEamvD6mWblyZWzdujV27twZ48aN677uo6SkJK688sqIiFi2bFlMmjQp6urqIiLiwQcfjPnz58fGjRtj8eLFsW3btjh48GA8+eSTg/xQAIDhKK8zI48//ni0tbXFggULory8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\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "x = np.array([0.5, 0.7, 1.0, 1.2, 1.3, 2.1])\n",
+ "bins = np.array([0, 1, 2, 3])\n",
+ "print(\"ans=\\n\", np.histogram(x, bins))\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "plt.hist(x, bins=bins)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "MxLBx_1IV9eU"
+ },
+ "source": [
+ "Q13. Compute the 2d histogram of x and y."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "id": "zJzFcfrxV9eU",
+ "outputId": "fd3f788c-3f4b-490c-d876-8519381f161d",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 499
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [[3. 0. 0. 0.]\n",
+ " [0. 2. 0. 0.]\n",
+ " [0. 0. 1. 1.]]\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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HA7L7/ervLxcbrc7YcdFctCv1NXRfXHkplXp2hmRDQ9E9M+H0xSKfPHJl21rFnFmJMXwunIWp/Vr+MrGjSQ9jJSVlWnXrl1RY36/X2VlZTH38Xg88ng8o8bdbndS/vjJOi6Sg36lnodm5Sj7tlsV6L8add9IKOJSaMgll64tVPbQrBw+lpuieF05i1P6Nd4abd/AevnyZXV2dqqzs1PStY/udnZ26vz585KundVYvXr1yPx/+Id/0B//+Ee99NJLOn36tH7605/q5z//uf7xH//R7kMDSFEs3Q7gZtgOI4cPH9aCBQu0YMECSVJNTY0WLFigV199VZLU09MzEkwkqbCwUL/61a/k9/s1b948bdy4Ue+88w4f6wUmGZZuBxAv25dplixZIsuK/fG8sVZXXbJkiY4dO2b3oQA4zPDS7e1n+3ThVLu2rVnEpRkAN8QX5QFIqPQ018hNqnyHDIDxIIwAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADAqrjCyefNm3XXXXfJ6vXrwwQfV0dERc25jY6NcLlfUj9frjbtgAAAwudgOIx988IFqampUV1eno0ePat68eaqsrFRfX1/MfXw+n3p6ekZ+zp07d1NFAwCAycN2GHnjjTf03HPP6emnn1ZRUZG2bt2qjIwMbdu2LeY+LpdLeXl5Iz+5ubk3VTQAAJg8bIWRzz//XEeOHNHSpUu/OEBampYuXaq2traY+12+fFl33nmnCgoK9Pjjj+vEiRPxVwwAACaVW+xMvnDhgoaGhkad2cjNzdXp06fH3Gf27Nnatm2b5s6dq/7+fr3++utavHixTpw4oZkzZ465TygUUigUGtkOBoOSpHA4rHA4bKfk6xo+ViKPieShX85Br5yDXjmL0/o13jpthZF4lJWVqaysbGR78eLFmjNnjt5++21t2LBhzH0aGhpU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\n"
+ },
+ "metadata": {}
+ }
+ ],
+ "source": [
+ "xedges = [0, 1, 2, 3]\n",
+ "yedges = [0, 1, 2, 3, 4]\n",
+ "x = np.array([0, 0.1, 0.2, 1., 1.1, 2., 2.1])\n",
+ "y = np.array([0, 0.1, 0.2, 1., 1.1, 2., 3.3])\n",
+ "H, xedges, yedges = np.histogram2d(x, y, bins=(xedges, yedges))\n",
+ "print(\"ans=\\n\", H)\n",
+ "\n",
+ "plt.scatter(x, y)\n",
+ "plt.grid()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "mETuEVXKV9eU"
+ },
+ "source": [
+ "Q14. Count number of occurrences of 0 through 7 in x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "id": "oF2wKR9LV9eU",
+ "outputId": "a3953a0e-75eb-46f0-cff9-2dbe08eed8a5",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [1 3 1 1 0 0 0 1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 1, 3, 2, 1, 7])\n",
+ "print(\"ans=\\n\", np.bincount(x))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "1vgmx0YqV9eU"
+ },
+ "source": [
+ "Q15. Return the indices of the bins to which each value in x belongs."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "id": "ofDrI6xIV9eU",
+ "outputId": "83b361ef-1b0e-4dbd-a92f-fd6c3380dab7",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "ans=\n",
+ " [1 4 3 2]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0.2, 6.4, 3.0, 1.6])\n",
+ "bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])\n",
+ "\n",
+ "print(\"ans=\\n\", np.digitize(x, bins))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "collapsed": true,
+ "id": "LbA5_PcdV9eV"
+ },
+ "outputs": [],
+ "source": []
}
- ],
- "source": [
- "x = np.array([0, 1, 1, 3, 2, 1, 7])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q15. Return the indices of the bins to which each value in x belongs."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 130,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "ans=\n",
- " [1 4 3 2]\n"
- ]
+ ],
+ "metadata": {
+ "anaconda-cloud": {},
+ "kernelspec": {
+ "display_name": "Python [conda root]",
+ "language": "python",
+ "name": "conda-root-py"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.2"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
}
- ],
- "source": [
- "x = np.array([0.2, 6.4, 3.0, 1.6])\n",
- "bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "kernelspec": {
- "display_name": "Python [conda root]",
- "language": "python",
- "name": "conda-root-py"
},
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/1_Array_creation_routines.ipynb b/1_Array_creation_routines.ipynb
index 71790b6..dc472c9 100644
--- a/1_Array_creation_routines.ipynb
+++ b/1_Array_creation_routines.ipynb
@@ -1,798 +1,1120 @@
{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Array creation routines"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Ones and zeros"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import numpy as np"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a new array of 2*2 integers, without initializing entries."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[0, 0],\n",
- " [0, 0]])"
- ]
- },
- "execution_count": 27,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let X = np.array([1,2,3], [4,5,6], np.int32). \n",
- "Create a new array with the same shape and type as X."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[1, 2, 3],\n",
- " [4, 5, 6]])"
- ]
- },
- "execution_count": 32,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "X = np.array([[1,2,3], [4,5,6]], np.int32)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a 3-D array with ones on the diagonal and zeros elsewhere."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 33,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 1., 0., 0.],\n",
- " [ 0., 1., 0.],\n",
- " [ 0., 0., 1.]])"
- ]
- },
- "execution_count": 33,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": 35,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 1., 0., 0.],\n",
- " [ 0., 1., 0.],\n",
- " [ 0., 0., 1.]])"
- ]
- },
- "execution_count": 35,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a new array of 3*2 float numbers, filled with ones."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 1., 1.],\n",
- " [ 1., 1.],\n",
- " [ 1., 1.]])"
- ]
- },
- "execution_count": 36,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = np.arange(4, dtype=np.int64). Create an array of ones with the same shape and type as X."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 59,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([1, 1, 1, 1], dtype=int64)"
- ]
- },
- "execution_count": 59,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = np.arange(4, dtype=np.int64)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a new array of 3*2 float numbers, filled with zeros."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 0., 0.],\n",
- " [ 0., 0.],\n",
- " [ 0., 0.]])"
- ]
- },
- "execution_count": 45,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = np.arange(4, dtype=np.int64). Create an array of zeros with the same shape and type as X."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 58,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([0, 0, 0, 0], dtype=int64)"
- ]
- },
- "execution_count": 58,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = np.arange(4, dtype=np.int64)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a new array of 2*5 uints, filled with 6."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 49,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[6, 6, 6, 6, 6],\n",
- " [6, 6, 6, 6, 6]], dtype=uint32)"
- ]
- },
- "execution_count": 49,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = np.arange(4, dtype=np.int64). Create an array of 6's with the same shape and type as X."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 79,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([6, 6, 6, 6], dtype=int64)"
- ]
- },
- "execution_count": 79,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = np.arange(4, dtype=np.int64)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## From existing data"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create an array of [1, 2, 3]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 53,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([1, 2, 3])"
- ]
- },
- "execution_count": 53,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = [1, 2]. Convert it into an array."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 60,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([1, 2])"
- ]
- },
- "execution_count": 60,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = [1,2]\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let X = np.array([[1, 2], [3, 4]]). Convert it into a matrix."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "matrix([[1, 2],\n",
- " [3, 4]])"
- ]
- },
- "execution_count": 62,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "X = np.array([[1, 2], [3, 4]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = [1, 2]. Conver it into an array of `float`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 63,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 1., 2.])"
- ]
- },
- "execution_count": 63,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = [1, 2]\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = np.array([30]). Convert it into scalar of its single element, i.e. 30."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 67,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "30"
- ]
- },
- "execution_count": 67,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "x = np.array([30])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let x = np.array([1, 2, 3]). Create a array copy of x, which has a different id from x."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 76,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "70140352 [1 2 3]\n",
- "70140752 [1 2 3]\n"
- ]
- }
- ],
- "source": [
- "x = np.array([1, 2, 3])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Numerical ranges"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create an array of 2, 4, 6, 8, ..., 100."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 85,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26,\n",
- " 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,\n",
- " 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,\n",
- " 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100])"
- ]
- },
- "execution_count": 85,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a 1-D array of 50 evenly spaced elements between 3. and 10., inclusive."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 86,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 3. , 3.14285714, 3.28571429, 3.42857143,\n",
- " 3.57142857, 3.71428571, 3.85714286, 4. ,\n",
- " 4.14285714, 4.28571429, 4.42857143, 4.57142857,\n",
- " 4.71428571, 4.85714286, 5. , 5.14285714,\n",
- " 5.28571429, 5.42857143, 5.57142857, 5.71428571,\n",
- " 5.85714286, 6. , 6.14285714, 6.28571429,\n",
- " 6.42857143, 6.57142857, 6.71428571, 6.85714286,\n",
- " 7. , 7.14285714, 7.28571429, 7.42857143,\n",
- " 7.57142857, 7.71428571, 7.85714286, 8. ,\n",
- " 8.14285714, 8.28571429, 8.42857143, 8.57142857,\n",
- " 8.71428571, 8.85714286, 9. , 9.14285714,\n",
- " 9.28571429, 9.42857143, 9.57142857, 9.71428571,\n",
- " 9.85714286, 10. ])"
- ]
- },
- "execution_count": 86,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a 1-D array of 50 element spaced evenly on a log scale between 3. and 10., exclusive."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 88,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 1.00000000e+03, 1.38038426e+03, 1.90546072e+03,\n",
- " 2.63026799e+03, 3.63078055e+03, 5.01187234e+03,\n",
- " 6.91830971e+03, 9.54992586e+03, 1.31825674e+04,\n",
- " 1.81970086e+04, 2.51188643e+04, 3.46736850e+04,\n",
- " 4.78630092e+04, 6.60693448e+04, 9.12010839e+04,\n",
- " 1.25892541e+05, 1.73780083e+05, 2.39883292e+05,\n",
- " 3.31131121e+05, 4.57088190e+05, 6.30957344e+05,\n",
- " 8.70963590e+05, 1.20226443e+06, 1.65958691e+06,\n",
- " 2.29086765e+06, 3.16227766e+06, 4.36515832e+06,\n",
- " 6.02559586e+06, 8.31763771e+06, 1.14815362e+07,\n",
- " 1.58489319e+07, 2.18776162e+07, 3.01995172e+07,\n",
- " 4.16869383e+07, 5.75439937e+07, 7.94328235e+07,\n",
- " 1.09647820e+08, 1.51356125e+08, 2.08929613e+08,\n",
- " 2.88403150e+08, 3.98107171e+08, 5.49540874e+08,\n",
- " 7.58577575e+08, 1.04712855e+09, 1.44543977e+09,\n",
- " 1.99526231e+09, 2.75422870e+09, 3.80189396e+09,\n",
- " 5.24807460e+09, 7.24435960e+09])"
- ]
- },
- "execution_count": 88,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Building matrices"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let X = np.array([[ 0, 1, 2, 3],\n",
- " [ 4, 5, 6, 7],\n",
- " [ 8, 9, 10, 11]]).\n",
- " Get the diagonal of X, that is, [0, 5, 10]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 93,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([ 0, 5, 10])"
- ]
- },
- "execution_count": 93,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "X = np.array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a 2-D array whose diagonal equals [1, 2, 3, 4] and 0's elsewhere."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 95,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[1, 0, 0, 0],\n",
- " [0, 2, 0, 0],\n",
- " [0, 0, 3, 0],\n",
- " [0, 0, 0, 4]])"
- ]
- },
- "execution_count": 95,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create an array which looks like below.\n",
- "array([[ 0., 0., 0., 0., 0.],\n",
- " [ 1., 0., 0., 0., 0.],\n",
- " [ 1., 1., 0., 0., 0.]])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 97,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 0., 0., 0., 0., 0.],\n",
- " [ 1., 0., 0., 0., 0.],\n",
- " [ 1., 1., 0., 0., 0.]])"
- ]
- },
- "execution_count": 97,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create an array which looks like below.\n",
- "array([[ 0, 0, 0],\n",
- " [ 4, 0, 0],\n",
- " [ 7, 8, 0],\n",
- " [10, 11, 12]])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 101,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 0, 0, 0],\n",
- " [ 4, 0, 0],\n",
- " [ 7, 8, 0],\n",
- " [10, 11, 12]])"
- ]
- },
- "execution_count": 101,
- "metadata": {},
- "output_type": "execute_result"
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Tzb4RqzxwY8b"
+ },
+ "source": [
+ "# Array creation routines"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "o1x4-sHzwY8c"
+ },
+ "source": [
+ "## Ones and zeros"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true,
+ "id": "nMqGZcj2wY8c"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "snOe1aqUwY8d"
+ },
+ "source": [
+ "Create a new array of 2*2 integers, without initializing entries."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "T-Knln88wY8d",
+ "outputId": "458e2675-1e4e-416e-e3f6-1b2d3d453625"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[101640133937702, 0],\n",
+ " [ 1, 135849737908256]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 2
+ }
+ ],
+ "source": [
+ "np.empty([2,2], int)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jFvxw128wY8d"
+ },
+ "source": [
+ "Let X = np.array([1,2,3], [4,5,6], np.int32).\n",
+ "Create a new array with the same shape and type as X."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "6Wtl27vPwY8d",
+ "outputId": "372fd33f-99fb-4c58-8964-94fca90b58ce"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[ 0, 1072693248, 0],\n",
+ " [1072693248, 0, 1072693248]], dtype=int32)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ],
+ "source": [
+ "X = np.array([[1,2,3], [4,5,6]], np.int32)\n",
+ "np.empty_like(X)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jjjE-IdKwY8e"
+ },
+ "source": [
+ "Create a 3-D array with ones on the diagonal and zeros elsewhere."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "-rcMZ7bdwY8e",
+ "outputId": "0515bc02-f38c-465e-8b07-92fd1158d934"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[1., 0., 0.],\n",
+ " [0., 1., 0.],\n",
+ " [0., 0., 1.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ],
+ "source": [
+ "np.eye(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "dyWidWYlwY8e",
+ "outputId": "366a8f95-c18a-4c26-af90-561764c19df6"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[1., 0., 0.],\n",
+ " [0., 1., 0.],\n",
+ " [0., 0., 1.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ],
+ "source": [
+ "np.identity(3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kctP_1ouwY8e"
+ },
+ "source": [
+ "Create a new array of 3*2 float numbers, filled with ones."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "OlfR0HhMwY8e",
+ "outputId": "bfdb50fb-2cf4-48e2-c86f-29c21d7b182e"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[1., 1.],\n",
+ " [1., 1.],\n",
+ " [1., 1.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ],
+ "source": [
+ "np.ones([3,2], float)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gRGVGDq0wY8e"
+ },
+ "source": [
+ "Let x = np.arange(4, dtype=np.int64). Create an array of ones with the same shape and type as X."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "V_7LhL5ewY8e",
+ "outputId": "31e08f50-e196-4c5d-fd3f-7554454dcab4"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1, 1, 1, 1])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ],
+ "source": [
+ "x = np.arange(4, dtype=np.int64)\n",
+ "np.ones_like(x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kvnYNxC9wY8e"
+ },
+ "source": [
+ "Create a new array of 3*2 float numbers, filled with zeros."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "eRZFLjeOwY8e",
+ "outputId": "5d3bb82d-47db-4509-de41-c2f1c7bcb6b6"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[0., 0.],\n",
+ " [0., 0.],\n",
+ " [0., 0.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ],
+ "source": [
+ "np.zeros((3,2), float)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "E0IsvdbUwY8e"
+ },
+ "source": [
+ "Let x = np.arange(4, dtype=np.int64). Create an array of zeros with the same shape and type as X."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "EE9LG_ZfwY8f",
+ "outputId": "642a555e-c69e-4925-a019-cf9ed5ae45ec"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([0, 0, 0, 0])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ],
+ "source": [
+ "x = np.arange(4, dtype=np.int64)\n",
+ "np.zeros_like(x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "7D0j64s_wY8f"
+ },
+ "source": [
+ "Create a new array of 2*5 uints, filled with 6."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "8P_McXwjwY8f",
+ "outputId": "8efeb324-89c1-4bb6-a8a2-1b674d895cbc"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[6, 6, 6, 6, 6],\n",
+ " [6, 6, 6, 6, 6]], dtype=uint64)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ],
+ "source": [
+ "np.full((2, 5), 6, dtype=np.uint)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "yVATjeqVwY8f",
+ "outputId": "c8238db0-e66c-48f8-cdd9-29ed476f6384"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[6, 6, 6, 6, 6],\n",
+ " [6, 6, 6, 6, 6]], dtype=uint64)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ],
+ "source": [
+ "np.ones([2, 5], dtype=np.uint) * 6"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "dmPnV9vIwY8f"
+ },
+ "source": [
+ "Let x = np.arange(4, dtype=np.int64). Create an array of 6's with the same shape and type as X."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "U08RK_xZwY8f",
+ "outputId": "374bb52e-4c22-44ee-81c6-f093d7482f1c"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([6, 6, 6, 6])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 12
+ }
+ ],
+ "source": [
+ "x = np.arange(4, dtype=np.int64)\n",
+ "np.full_like(x, 6)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "9nLfdzOHwY8f",
+ "outputId": "fa0dbbe5-9557-4ec3-f5ff-7d1353e84dc6"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([6, 6, 6, 6])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ }
+ ],
+ "source": [
+ "np.ones_like(x) * 6"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "o2T1C2dLwY8f"
+ },
+ "source": [
+ "## From existing data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "iX9LKZHZwY8f"
+ },
+ "source": [
+ "Create an array of [1, 2, 3]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "fYabJ7pZwY8f",
+ "outputId": "ad974d66-3788-4133-8ced-09d51b6b17be"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1, 2, 3])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 14
+ }
+ ],
+ "source": [
+ "np.array([1, 2, 3])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "O9nnGn4-wY8f"
+ },
+ "source": [
+ "Let x = [1, 2]. Convert it into an array."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "bOpnbHYpwY8f",
+ "outputId": "601cd5f2-0467-47e9-b9fe-7ea8018f28df"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1, 2])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ }
+ ],
+ "source": [
+ "x = [1,2]\n",
+ "np.asarray(x)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "9FogCrWmwY8f"
+ },
+ "source": [
+ "Let X = np.array([[1, 2], [3, 4]]). Convert it into a matrix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "0M9nqqHawY8f",
+ "outputId": "0bfbfab6-a72b-4e1c-f94a-ec8ec72cbebd"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "matrix([[1, 2],\n",
+ " [3, 4]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ],
+ "source": [
+ "X = np.array([[1, 2], [3, 4]])\n",
+ "np.asmatrix(X)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FOx7aFWgwY8f"
+ },
+ "source": [
+ "Let x = [1, 2]. Conver it into an array of `float`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "4sOZ-w5iwY8f",
+ "outputId": "9062e274-b2e8-4052-a033-e1fc450ca37a"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1., 2.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 17
+ }
+ ],
+ "source": [
+ "x = [1, 2]\n",
+ "np.asfarray(x)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Tj6IOh8RwY8g",
+ "outputId": "6a5076f7-8411-49b5-c25c-2b753489e2b7"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1., 2.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 18
+ }
+ ],
+ "source": [
+ "np.asarray(x, float)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_S1aaA0iwY8g"
+ },
+ "source": [
+ "Let x = np.array([30]). Convert it into scalar of its single element, i.e. 30."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "3D-jBuodwY8g",
+ "outputId": "71a3fda3-783f-4582-b331-dae3a6e6e891"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "30"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ],
+ "source": [
+ "x = np.array([30])\n",
+ "x.item()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "4XUBEauIwY8g",
+ "outputId": "72b3ad1b-5f6f-4b58-b8f2-238bdc551dd3"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "30"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 20
+ }
+ ],
+ "source": [
+ "x[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XLJ1m2_nwY8g"
+ },
+ "source": [
+ "Let x = np.array([1, 2, 3]). Create a array copy of x, which has a different id from x."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "sF_rk01iwY8g",
+ "outputId": "394267cf-f15d-46bb-c680-56a21f4a4ff9"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "135849319563056 [1 2 3]\n",
+ "135849319931824 [1 2 3]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([1, 2, 3])\n",
+ "y = np.copy(x)\n",
+ "print (id(x), x)\n",
+ "print (id(y), y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "7zn6ntbywY8g"
+ },
+ "source": [
+ "## Numerical ranges"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Xp2CZ7YswY8g"
+ },
+ "source": [
+ "Create an array of 2, 4, 6, 8, ..., 100."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "IifI2aGEwY8g",
+ "outputId": "a071276d-a269-4032-a29f-3e778a15d358"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26,\n",
+ " 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,\n",
+ " 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,\n",
+ " 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ }
+ ],
+ "source": [
+ "np.arange(2, 101, 2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XERc8PlEwY8g"
+ },
+ "source": [
+ "Create a 1-D array of 50 evenly spaced elements between 3. and 10., inclusive."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "_AXadv6ywY8g",
+ "outputId": "0f471a2b-c9dd-49b2-da93-db758212767e"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([ 3. , 3.14285714, 3.28571429, 3.42857143, 3.57142857,\n",
+ " 3.71428571, 3.85714286, 4. , 4.14285714, 4.28571429,\n",
+ " 4.42857143, 4.57142857, 4.71428571, 4.85714286, 5. ,\n",
+ " 5.14285714, 5.28571429, 5.42857143, 5.57142857, 5.71428571,\n",
+ " 5.85714286, 6. , 6.14285714, 6.28571429, 6.42857143,\n",
+ " 6.57142857, 6.71428571, 6.85714286, 7. , 7.14285714,\n",
+ " 7.28571429, 7.42857143, 7.57142857, 7.71428571, 7.85714286,\n",
+ " 8. , 8.14285714, 8.28571429, 8.42857143, 8.57142857,\n",
+ " 8.71428571, 8.85714286, 9. , 9.14285714, 9.28571429,\n",
+ " 9.42857143, 9.57142857, 9.71428571, 9.85714286, 10. ])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 23
+ }
+ ],
+ "source": [
+ "np.linspace(3., 10, 50)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kyCQttMpwY8h"
+ },
+ "source": [
+ "Create a 1-D array of 50 element spaced evenly on a log scale between 3. and 10., exclusive."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "BReqbXxFwY8h",
+ "outputId": "0169a0e2-a86e-4eb0-a88e-1e747634f43a"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1.00000000e+03, 1.38038426e+03, 1.90546072e+03, 2.63026799e+03,\n",
+ " 3.63078055e+03, 5.01187234e+03, 6.91830971e+03, 9.54992586e+03,\n",
+ " 1.31825674e+04, 1.81970086e+04, 2.51188643e+04, 3.46736850e+04,\n",
+ " 4.78630092e+04, 6.60693448e+04, 9.12010839e+04, 1.25892541e+05,\n",
+ " 1.73780083e+05, 2.39883292e+05, 3.31131121e+05, 4.57088190e+05,\n",
+ " 6.30957344e+05, 8.70963590e+05, 1.20226443e+06, 1.65958691e+06,\n",
+ " 2.29086765e+06, 3.16227766e+06, 4.36515832e+06, 6.02559586e+06,\n",
+ " 8.31763771e+06, 1.14815362e+07, 1.58489319e+07, 2.18776162e+07,\n",
+ " 3.01995172e+07, 4.16869383e+07, 5.75439937e+07, 7.94328235e+07,\n",
+ " 1.09647820e+08, 1.51356125e+08, 2.08929613e+08, 2.88403150e+08,\n",
+ " 3.98107171e+08, 5.49540874e+08, 7.58577575e+08, 1.04712855e+09,\n",
+ " 1.44543977e+09, 1.99526231e+09, 2.75422870e+09, 3.80189396e+09,\n",
+ " 5.24807460e+09, 7.24435960e+09])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 24
+ }
+ ],
+ "source": [
+ "np.logspace(3., 10., 50, endpoint=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "nurV5Aa2wY8h"
+ },
+ "source": [
+ "## Building matrices"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-sw3tBEMwY8h"
+ },
+ "source": [
+ "Let X = np.array([[ 0, 1, 2, 3],\n",
+ " [ 4, 5, 6, 7],\n",
+ " [ 8, 9, 10, 11]]).\n",
+ " Get the diagonal of X, that is, [0, 5, 10]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "njZN065SwY8h",
+ "outputId": "2ab2bfc7-16a4-417c-f80a-b0578ca187ce"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([ 0, 5, 10])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 25
+ }
+ ],
+ "source": [
+ "X = np.array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])\n",
+ "np.diag(X)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ESVl4uVYwY8h",
+ "outputId": "84a6bbcc-e7d2-44ef-cc88-79049d1ac858"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([ 0, 5, 10])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 26
+ }
+ ],
+ "source": [
+ "X.diagonal()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HS3emp0hwY8h"
+ },
+ "source": [
+ "Create a 2-D array whose diagonal equals [1, 2, 3, 4] and 0's elsewhere."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ZqZXmE3qwY8h",
+ "outputId": "447d557c-af4e-4878-bf20-6f5fa935a676"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[1, 0, 0, 0],\n",
+ " [0, 2, 0, 0],\n",
+ " [0, 0, 3, 0],\n",
+ " [0, 0, 0, 4]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 27
+ }
+ ],
+ "source": [
+ "np.diagflat([1, 2, 3, 4])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "RuyBaZcXwY8h"
+ },
+ "source": [
+ "Create an array which looks like below.\n",
+ "array([[ 0., 0., 0., 0., 0.],\n",
+ " [ 1., 0., 0., 0., 0.],\n",
+ " [ 1., 1., 0., 0., 0.]])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "dBroXcbSwY8h",
+ "outputId": "f316ba64-618c-4375-d03b-4fdff8fe9867"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[0., 0., 0., 0., 0.],\n",
+ " [1., 0., 0., 0., 0.],\n",
+ " [1., 1., 0., 0., 0.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 28
+ }
+ ],
+ "source": [
+ "np.tri(3, 5, -1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ZkH0ElOowY8h"
+ },
+ "source": [
+ "Create an array which looks like below.\n",
+ "array([[ 0, 0, 0],\n",
+ " [ 4, 0, 0],\n",
+ " [ 7, 8, 0],\n",
+ " [10, 11, 12]])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "vad1cmZ_wY8h",
+ "outputId": "324eff1e-45b7-4907-8348-a39dbac2d974"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[ 0, 0, 0],\n",
+ " [ 4, 0, 0],\n",
+ " [ 7, 8, 0],\n",
+ " [10, 11, 12]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 29
+ }
+ ],
+ "source": [
+ "np.tril(np.arange(1, 13).reshape(4, 3), -1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "65UsidJ_wY8h"
+ },
+ "source": [
+ "Create an array which looks like below. array([[ 1, 2, 3],\n",
+ " [ 4, 5, 6],\n",
+ " [ 0, 8, 9],\n",
+ " [ 0, 0, 12]])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hmaDDnE7wY8h",
+ "outputId": "311e88e5-1302-4324-98be-dd9c1538cac3"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([[ 1, 2, 3],\n",
+ " [ 4, 5, 6],\n",
+ " [ 0, 8, 9],\n",
+ " [ 0, 0, 12]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 30
+ }
+ ],
+ "source": [
+ "np.triu(np.arange(1, 13).reshape(4, 3), -1)"
+ ]
}
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create an array which looks like below. array([[ 1, 2, 3],\n",
- " [ 4, 5, 6],\n",
- " [ 0, 8, 9],\n",
- " [ 0, 0, 12]])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 102,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "array([[ 1, 2, 3],\n",
- " [ 4, 5, 6],\n",
- " [ 0, 8, 9],\n",
- " [ 0, 0, 12]])"
- ]
- },
- "execution_count": 102,
- "metadata": {},
- "output_type": "execute_result"
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "colab": {
+ "provenance": [],
+ "cell_execution_strategy": "setup",
+ "include_colab_link": true
}
- ],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
},
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.6"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/2_Array_manipulation_routines.ipynb b/2_Array_manipulation_routines.ipynb
index 85243a3..90d4a7b 100644
--- a/2_Array_manipulation_routines.ipynb
+++ b/2_Array_manipulation_routines.ipynb
@@ -1,736 +1,1019 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Array manipulation routines"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import numpy as np"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "'1.11.2'"
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "np.__version__"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "collapsed": true
- },
- "source": [
- "Q1. Let x be a ndarray [10, 10, 3] with all elements set to one. Reshape x so that the size of the second dimension equals 150."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1.]\n",
- " [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
- " 1. 1. 1. 1. 1. 1.]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q2. Let x be array [[1, 2, 3], [4, 5, 6]]. Convert it to [1 4 2 5 3 6]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[1 4 2 5 3 6]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q3. Let x be array [[1, 2, 3], [4, 5, 6]]. Get the 5th element."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "5\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q4. Let x be an arbitrary 3-D array of shape (3, 4, 5). Permute the dimensions of x such that the new shape will be (4,3,5).\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 36,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(4L, 3L, 5L)\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q5. Let x be an arbitrary 2-D array of shape (3, 4). Permute the dimensions of x such that the new shape will be (4,3)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(4L, 3L)\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q5. Let x be an arbitrary 2-D array of shape (3, 4). Insert a nex axis such that the new shape will be (3, 1, 4)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 42,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(3L, 1L, 4L)\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q6. Let x be an arbitrary 3-D array of shape (3, 4, 1). Remove a single-dimensional entries such that the new shape will be (3, 4)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 43,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "(3L, 4L)\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q7. Lex x be an array
\n",
- "[[ 1 2 3]
\n",
- "[ 4 5 6].
\n",
- "and y be an array
\n",
- "[[ 7 8 9]
\n",
- "[10 11 12]].
\n",
- "Concatenate x and y so that a new array looks like
[[1, 2, 3, 7, 8, 9],
[4, 5, 6, 10, 11, 12]].\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 31,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[ 1 2 3 7 8 9]\n",
- " [ 4 5 6 10 11 12]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q8. Lex x be an array
\n",
- "[[ 1 2 3]
\n",
- "[ 4 5 6].
\n",
- "and y be an array
\n",
- "[[ 7 8 9]
\n",
- "[10 11 12]].
\n",
- "Concatenate x and y so that a new array looks like
[[ 1 2 3]
\n",
- " [ 4 5 6]
\n",
- " [ 7 8 9]
\n",
- " [10 11 12]]\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 38,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[ 1 2 3]\n",
- " [ 4 5 6]\n",
- " [ 7 8 9]\n",
- " [10 11 12]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q8. Let x be an array [1 2 3] and y be [4 5 6]. Convert it to [[1, 4], [2, 5], [3, 6]]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 54,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[1 4]\n",
- " [2 5]\n",
- " [3 6]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q9. Let x be an array [[1],[2],[3]] and y be [[4], [5], [6]]. Convert x to [[[1, 4]], [[2, 5]], [[3, 6]]]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[[1 4]]\n",
- "\n",
- " [[2 5]]\n",
- "\n",
- " [[3 6]]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q10. Let x be an array [1, 2, 3, ..., 9]. Split x into 3 arrays, each of which has 4, 2, and 3 elements in the original order."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 62,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[array([1, 2, 3, 4]), array([5, 6]), array([7, 8, 9])]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q11. Let x be an array
\n",
- "[[[ 0., 1., 2., 3.],
\n",
- " [ 4., 5., 6., 7.]],
\n",
- " \n",
- " [[ 8., 9., 10., 11.],
\n",
- " [ 12., 13., 14., 15.]]].
\n",
- "Split it into two such that the first array looks like
\n",
- "[[[ 0., 1., 2.],
\n",
- " [ 4., 5., 6.]],
\n",
- " \n",
- " [[ 8., 9., 10.],
\n",
- " [ 12., 13., 14.]]].
\n",
- " \n",
- "and the second one look like:
\n",
- " \n",
- "[[[ 3.],
\n",
- " [ 7.]],
\n",
- " \n",
- " [[ 11.],
\n",
- " [ 15.]]].
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 72,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[array([[[ 0, 1, 2],\n",
- " [ 4, 5, 6]],\n",
- "\n",
- " [[ 8, 9, 10],\n",
- " [12, 13, 14]]]), array([[[ 3],\n",
- " [ 7]],\n",
- "\n",
- " [[11],\n",
- " [15]]])]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q12. Let x be an array
\n",
- "[[ 0., 1., 2., 3.],
\n",
- " [ 4., 5., 6., 7.],
\n",
- " [ 8., 9., 10., 11.],
\n",
- " [ 12., 13., 14., 15.]].
\n",
- "Split it into two arrays along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 74,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[array([[ 0, 1],\n",
- " [ 4, 5],\n",
- " [ 8, 9],\n",
- " [12, 13]]), array([[ 2, 3],\n",
- " [ 6, 7],\n",
- " [10, 11],\n",
- " [14, 15]])]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q13. Let x be an array
\n",
- "[[ 0., 1., 2., 3.],
\n",
- " [ 4., 5., 6., 7.],
\n",
- " [ 8., 9., 10., 11.],
\n",
- " [ 12., 13., 14., 15.]].
\n",
- "Split it into two arrays along the first axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 75,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[array([[0, 1, 2, 3],\n",
- " [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],\n",
- " [12, 13, 14, 15]])]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q14. Let x be an array [0, 1, 2]. Convert it to
\n",
- "[[0, 1, 2, 0, 1, 2],
\n",
- " [0, 1, 2, 0, 1, 2]]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 93,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[0 1 2 0 1 2]\n",
- " [0 1 2 0 1 2]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q15. Let x be an array [0, 1, 2]. Convert it to
\n",
- "[0, 0, 1, 1, 2, 2]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 83,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[0 0 1 1 2 2]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q16. Let x be an array [0, 0, 0, 1, 2, 3, 0, 2, 1, 0].
\n",
- "remove the leading the trailing zeros."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 105,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[1 2 3 0 2 1]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q17. Let x be an array [2, 2, 1, 5, 4, 5, 1, 2, 3]. Get two arrays of unique elements and their counts.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 107,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[1 2 3 4 5] [2 3 1 1 2]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q18. Lex x be an array
\n",
- "[[ 1 2]
\n",
- " [ 3 4].
\n",
- "Flip x along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 120,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[2 1]\n",
- " [4 3]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q19. Lex x be an array
\n",
- "[[ 1 2]
\n",
- " [ 3 4].
\n",
- "Flip x along the first axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 121,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[3 4]\n",
- " [1 2]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q20. Lex x be an array
\n",
- "[[ 1 2]
\n",
- " [ 3 4].
\n",
- "Rotate x 90 degrees counter-clockwise."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 122,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[2 4]\n",
- " [1 3]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Q21 Lex x be an array
\n",
- "[[ 1 2 3 4]
\n",
- " [ 5 6 7 8].
\n",
- "Shift elements one step to right along the second axis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 126,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[[4 1 2 3]\n",
- " [8 5 6 7]]\n"
- ]
- }
- ],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FeCSvzn7yLdm"
+ },
+ "source": [
+ "# Array manipulation routines"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": true,
+ "id": "-X96ykV3yLdn"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "53iPhefjyLdo",
+ "outputId": "7911cab9-1a27-4068-a0e3-ef74f22a5ee2",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'1.25.2'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 2
+ }
+ ],
+ "source": [
+ "np.__version__"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true,
+ "id": "Zy7UoA_CyLdp"
+ },
+ "source": [
+ "Q1. Let x be a ndarray [10, 10, 3] with all elements set to one. Reshape x so that the size of the second dimension equals 150."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "id": "2fpIMT5SyLdp",
+ "outputId": "000dedbd-4244-4c36-d01a-0444e8bd83a1",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1.]\n",
+ " [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
+ " 1. 1. 1. 1. 1. 1.]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.ones([10, 10, 3])\n",
+ "out = np.reshape(x, [-1, 150])\n",
+ "print (out)\n",
+ "assert np.allclose(out, np.ones([10, 10, 3]).reshape([-1, 150]))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "b4KrOPRvyLdp"
+ },
+ "source": [
+ "Q2. Let x be array [[1, 2, 3], [4, 5, 6]]. Convert it to [1 4 2 5 3 6]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "id": "mp9cPSiEyLdq",
+ "outputId": "e739f8cc-be80-4451-cf0b-4aff15b1945d",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[1 4 2 5 3 6]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [4, 5, 6]])\n",
+ "out1 = np.ravel(x, order='F')\n",
+ "out2 = x.flatten(order=\"F\")\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out1)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "cFNwUvCByLdq"
+ },
+ "source": [
+ "Q3. Let x be array [[1, 2, 3], [4, 5, 6]]. Get the 5th element."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "id": "THZIM1khyLdq",
+ "outputId": "c4b70f96-67c1-4056-9160-61d30531d482",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "5\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [4, 5, 6]])\n",
+ "out1 = x.flat[4]\n",
+ "out2 = np.ravel(x)[4]\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out1)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "NuebMeLQyLdq"
+ },
+ "source": [
+ "Q4. Let x be an arbitrary 3-D array of shape (3, 4, 5). Permute the dimensions of x such that the new shape will be (4,3,5).\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "id": "goI2ZWxNyLdr",
+ "outputId": "17c0acf9-1b59-4f95-c053-a4396f7bc52a",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(4, 3, 5)\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.zeros((3, 4, 5))\n",
+ "out1 = np.swapaxes(x, 1, 0)\n",
+ "out2 = x.transpose([1, 0, 2])\n",
+ "assert out1.shape == out2.shape\n",
+ "print (out1.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Og_a0d6myLdr"
+ },
+ "source": [
+ "Q5. Let x be an arbitrary 2-D array of shape (3, 4). Permute the dimensions of x such that the new shape will be (4,3)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "id": "HdGDLSYiyLdr",
+ "outputId": "7d3e0c45-26bd-473c-8372-293dd68eedb7",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(4, 3)\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.zeros((3, 4))\n",
+ "out1 = np.swapaxes(x, 1, 0)\n",
+ "out2 = x.transpose()\n",
+ "out3 = x.T\n",
+ "assert out1.shape == out2.shape == out3.shape\n",
+ "print (out1.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Dt0P-9u3yLdr"
+ },
+ "source": [
+ "Q5. Let x be an arbitrary 2-D array of shape (3, 4). Insert a nex axis such that the new shape will be (3, 1, 4)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "id": "ELkIP5pCyLds",
+ "outputId": "722dcfeb-5540-4d42-8d9b-2842e0d882f5",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(3, 1, 4)\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.zeros((3, 4))\n",
+ "print (np.expand_dims(x, axis=1).shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "NjTSGEBRyLds"
+ },
+ "source": [
+ "Q6. Let x be an arbitrary 3-D array of shape (3, 4, 1). Remove a single-dimensional entries such that the new shape will be (3, 4)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "id": "An2wbjjUyLds",
+ "outputId": "95806de5-f643-4ebd-bb89-a5b1bba5ba94",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(3, 4)\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.zeros((3, 4, 1))\n",
+ "print (np.squeeze(x).shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "4oXZdOOcyLds"
+ },
+ "source": [
+ "Q7. Lex x be an array
\n",
+ "[[ 1 2 3]
\n",
+ "[ 4 5 6].
\n",
+ "and y be an array
\n",
+ "[[ 7 8 9]
\n",
+ "[10 11 12]].
\n",
+ "Concatenate x and y so that a new array looks like
[[1, 2, 3, 7, 8, 9],
[4, 5, 6, 10, 11, 12]].\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "id": "CZqmneq6yLds",
+ "outputId": "614cc9eb-8026-4601-d57e-6ecd51b6f20c",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[ 1 2 3 7 8 9]\n",
+ " [ 4 5 6 10 11 12]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [4, 5, 6]])\n",
+ "y = np.array([[7, 8, 9], [10, 11, 12]])\n",
+ "out1 = np.concatenate((x, y), 1)\n",
+ "out2 = np.hstack((x, y))\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gSKH6bQkyLdt"
+ },
+ "source": [
+ "Q8. Lex x be an array
\n",
+ "[[ 1 2 3]
\n",
+ "[ 4 5 6].
\n",
+ "and y be an array
\n",
+ "[[ 7 8 9]
\n",
+ "[10 11 12]].
\n",
+ "Concatenate x and y so that a new array looks like
[[ 1 2 3]
\n",
+ " [ 4 5 6]
\n",
+ " [ 7 8 9]
\n",
+ " [10 11 12]]\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "id": "yDgRO4IPyLdt",
+ "outputId": "b86d2472-63a4-486c-d5cd-0e605ead932f",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[ 1 2 3]\n",
+ " [ 4 5 6]\n",
+ " [ 7 8 9]\n",
+ " [10 11 12]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1, 2, 3], [4, 5, 6]])\n",
+ "y = np.array([[7, 8, 9], [10, 11, 12]])\n",
+ "out1 = np.concatenate((x, y), 0)\n",
+ "out2 = np.vstack((x, y))\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "9AaOsEWzyLdt"
+ },
+ "source": [
+ "Q8. Let x be an array [1 2 3] and y be [4 5 6]. Convert it to [[1, 4], [2, 5], [3, 6]]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "id": "2nf6dYi2yLdt",
+ "outputId": "80897d83-77ff-4bc5-b3c8-4e1e71e02599",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[1 4]\n",
+ " [2 5]\n",
+ " [3 6]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array((1,2,3))\n",
+ "y = np.array((4,5,6))\n",
+ "out1 = np.column_stack((x, y))\n",
+ "out2 = np.squeeze(np.dstack((x, y)))\n",
+ "out3 = np.vstack((x, y)).T\n",
+ "assert np.allclose(out1, out2)\n",
+ "assert np.allclose(out2, out3)\n",
+ "print (out1)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XmQ-SP01yLdt"
+ },
+ "source": [
+ "Q9. Let x be an array [[1],[2],[3]] and y be [[4], [5], [6]]. Convert x to [[[1, 4]], [[2, 5]], [[3, 6]]]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "id": "hCm22Ut_yLdu",
+ "outputId": "a9b7e842-f0ab-4db4-a100-e3a797a82dde",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[[1 4]]\n",
+ "\n",
+ " [[2 5]]\n",
+ "\n",
+ " [[3 6]]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1],[2],[3]])\n",
+ "y = np.array([[4],[5],[6]])\n",
+ "out = np.dstack((x, y))\n",
+ "print (out)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Q2jNdblGyLdu"
+ },
+ "source": [
+ "Q10. Let x be an array [1, 2, 3, ..., 9]. Split x into 3 arrays, each of which has 4, 2, and 3 elements in the original order."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "id": "ityFiwBZyLdu",
+ "outputId": "7e389434-ec36-44d9-ef50-cb5f83cbd0f1",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[array([1, 2, 3, 4]), array([5, 6]), array([7, 8, 9])]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(1, 10)\n",
+ "print (np.split(x, [4, 6]))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "pAUC8PFAyLdu"
+ },
+ "source": [
+ "Q11. Let x be an array
\n",
+ "[[[ 0., 1., 2., 3.],
\n",
+ " [ 4., 5., 6., 7.]],
\n",
+ "\n",
+ " [[ 8., 9., 10., 11.],
\n",
+ " [ 12., 13., 14., 15.]]].
\n",
+ "Split it into two such that the first array looks like
\n",
+ "[[[ 0., 1., 2.],
\n",
+ " [ 4., 5., 6.]],
\n",
+ "\n",
+ " [[ 8., 9., 10.],
\n",
+ " [ 12., 13., 14.]]].
\n",
+ " \n",
+ "and the second one look like:
\n",
+ " \n",
+ "[[[ 3.],
\n",
+ " [ 7.]],
\n",
+ "\n",
+ " [[ 11.],
\n",
+ " [ 15.]]].
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "id": "bjw_05ITyLdu",
+ "outputId": "69574982-da83-430b-844f-85f957a23af8",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[array([[[ 0, 1, 2],\n",
+ " [ 4, 5, 6]],\n",
+ "\n",
+ " [[ 8, 9, 10],\n",
+ " [12, 13, 14]]]), array([[[ 3],\n",
+ " [ 7]],\n",
+ "\n",
+ " [[11],\n",
+ " [15]]])]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(16).reshape(2, 2, 4)\n",
+ "out1 = np.split(x, [3],axis=2)\n",
+ "out2 = np.dsplit(x, [3])\n",
+ "assert np.allclose(out1[0], out2[0])\n",
+ "assert np.allclose(out1[1], out2[1])\n",
+ "print (out1)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Ai0YM6umyLdu"
+ },
+ "source": [
+ "Q12. Let x be an array
\n",
+ "[[ 0., 1., 2., 3.],
\n",
+ " [ 4., 5., 6., 7.],
\n",
+ " [ 8., 9., 10., 11.],
\n",
+ " [ 12., 13., 14., 15.]].
\n",
+ "Split it into two arrays along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "id": "1WVXzXUIyLdu",
+ "outputId": "28a67b84-62a6-425d-edf8-0564dcc9c32a",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[array([[ 0, 1],\n",
+ " [ 4, 5],\n",
+ " [ 8, 9],\n",
+ " [12, 13]]), array([[ 2, 3],\n",
+ " [ 6, 7],\n",
+ " [10, 11],\n",
+ " [14, 15]])]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(16).reshape((4, 4))\n",
+ "out1 = np.hsplit(x, 2)\n",
+ "out2 = np.split(x, 2, 1)\n",
+ "assert np.allclose(out1[0], out2[0])\n",
+ "assert np.allclose(out1[1], out2[1])\n",
+ "print (out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "nx4dR4F8yLdv"
+ },
+ "source": [
+ "Q13. Let x be an array
\n",
+ "[[ 0., 1., 2., 3.],
\n",
+ " [ 4., 5., 6., 7.],
\n",
+ " [ 8., 9., 10., 11.],
\n",
+ " [ 12., 13., 14., 15.]].
\n",
+ "Split it into two arrays along the first axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "id": "Q5NEvUALyLdv",
+ "outputId": "5c7e686d-2e5b-4283-dfee-930c91a07352",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[array([[0, 1, 2, 3],\n",
+ " [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],\n",
+ " [12, 13, 14, 15]])]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(16).reshape((4, 4))\n",
+ "out1 = np.vsplit(x, 2)\n",
+ "out2 = np.split(x, 2, 0)\n",
+ "assert np.allclose(out1[0], out2[0])\n",
+ "assert np.allclose(out1[1], out2[1])\n",
+ "print (out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Mc2qzQSdyLdv"
+ },
+ "source": [
+ "Q14. Let x be an array [0, 1, 2]. Convert it to
\n",
+ "[[0, 1, 2, 0, 1, 2],
\n",
+ " [0, 1, 2, 0, 1, 2]]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "id": "4RH_svYWyLdv",
+ "outputId": "aaf95c15-39aa-43a0-de10-03024a8f47ca",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[0 1 2 0 1 2]\n",
+ " [0 1 2 0 1 2]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 2])\n",
+ "out1 = np.tile(x, [2, 2])\n",
+ "out2 = np.resize(x, [2, 6])\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "LpEpNO2OyLdv"
+ },
+ "source": [
+ "Q15. Let x be an array [0, 1, 2]. Convert it to
\n",
+ "[0, 0, 1, 1, 2, 2]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "id": "fepjs25zyLdw",
+ "outputId": "2b884a20-cd48-4031-8623-c943966df656",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[0 0 1 1 2 2]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([0, 1, 2])\n",
+ "print (np.repeat(x, 2))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "X__2KBi7yLdw"
+ },
+ "source": [
+ "Q16. Let x be an array [0, 0, 0, 1, 2, 3, 0, 2, 1, 0].
\n",
+ "remove the leading the trailing zeros."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "id": "nZkAIy0yyLdw",
+ "outputId": "7c0428bf-e35e-4395-c089-4071cfa2344f",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[1 2 3 0 2 1]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array((0, 0, 0, 1, 2, 3, 0, 2, 1, 0))\n",
+ "out = np.trim_zeros(x)\n",
+ "print (out)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ZCla94rIyLd4"
+ },
+ "source": [
+ "Q17. Let x be an array [2, 2, 1, 5, 4, 5, 1, 2, 3]. Get two arrays of unique elements and their counts.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "id": "0mjoIo9NyLd4",
+ "outputId": "eb275bd5-4fee-4762-90d9-37c07d72fa4d",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[1 2 3 4 5] [2 3 1 1 2]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([2, 2, 1, 5, 4, 5, 1, 2, 3])\n",
+ "u, indices = np.unique(x, return_counts=True)\n",
+ "print (u, indices)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "qEieNh4lyLd4"
+ },
+ "source": [
+ "Q18. Lex x be an array
\n",
+ "[[ 1 2]
\n",
+ " [ 3 4].
\n",
+ "Flip x along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "id": "CASD0V35yLd5",
+ "outputId": "74530152-a5c1-45ae-8ddd-a27151bcf4c2",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[2 1]\n",
+ " [4 3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1,2], [3,4]])\n",
+ "out1 = np.fliplr(x)\n",
+ "out2 = x[:, ::-1]\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "4Eq4gn12yLd5"
+ },
+ "source": [
+ "Q19. Lex x be an array
\n",
+ "[[ 1 2]
\n",
+ " [ 3 4].
\n",
+ "Flip x along the first axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "id": "Ml5CXwQMyLd5",
+ "outputId": "0fb6bc9f-eae7-4e8e-e46e-434565375c9f",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[3 4]\n",
+ " [1 2]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1,2], [3,4]])\n",
+ "out1 = np.flipud(x)\n",
+ "out2 = x[::-1, :]\n",
+ "assert np.allclose(out1, out2)\n",
+ "print (out1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "QugKOBynyLd5"
+ },
+ "source": [
+ "Q20. Lex x be an array
\n",
+ "[[ 1 2]
\n",
+ " [ 3 4].
\n",
+ "Rotate x 90 degrees counter-clockwise."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {
+ "id": "cu6I4iIcyLd5",
+ "outputId": "5c23cf70-6b21-4aa0-f2d8-b56fb4430fb5",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[2 4]\n",
+ " [1 3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.array([[1,2], [3,4]])\n",
+ "out = np.rot90(x)\n",
+ "print (out)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "s88mZcECyLd5"
+ },
+ "source": [
+ "Q21 Lex x be an array
\n",
+ "[[ 1 2 3 4]
\n",
+ " [ 5 6 7 8].
\n",
+ "Shift elements one step to right along the second axis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {
+ "id": "6ZK-MNUmyLd5",
+ "outputId": "bfa1f965-6815-4c65-c1a3-385fc9f82d2e",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[4 1 2 3]\n",
+ " [8 5 6 7]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "x = np.arange(1, 9).reshape([2, 4])\n",
+ "print (np.roll(x, 1, axis=1))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {
+ "collapsed": true,
+ "id": "IjegTkAFyLd6"
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.1"
+ },
+ "colab": {
+ "provenance": [],
+ "include_colab_link": true
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file