{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 3 5 7 9]\n"
     ]
    }
   ],
   "source": [
    "# Sorting Arrays\n",
    "# Fast Sorting in NumPy: np.sort and np.argsort\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "a = np.array([1, 9, 0, 7, 3, 5])\n",
    "sort = np.sort(a)\n",
    "print(sort)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 0 4 5 3 1]\n"
     ]
    }
   ],
   "source": [
    "# If you want the sorted index then use np.argsort\n",
    "\n",
    "index = np.argsort(a)\n",
    "print(index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[7 8 7 3 4 8]\n",
      " [6 3 8 8 5 1]\n",
      " [3 3 3 2 6 5]\n",
      " [5 2 5 6 1 5]]\n",
      "-----------------------------------\n",
      "[[3 2 3 2 1 1]\n",
      " [5 3 5 3 4 5]\n",
      " [6 3 7 6 5 5]\n",
      " [7 8 8 8 6 8]]\n",
      "-----------------------------------\n",
      "[[3 4 7 7 8 8]\n",
      " [1 3 5 6 8 8]\n",
      " [2 3 3 3 5 6]\n",
      " [1 2 5 5 5 6]]\n"
     ]
    }
   ],
   "source": [
    "# Sorting along rows or columns\n",
    "\n",
    "X = rand.randint(0, 10, (4, 6))      \n",
    "print(X)\n",
    "print(\"-----------------------------------\")\n",
    "# sort each column of X\n",
    "a = np.sort(X, axis=0)\n",
    "print(a)\n",
    "print(\"-----------------------------------\")\n",
    "# sort each row of X \n",
    "b = np.sort(X, axis =1)\n",
    "print(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[7 2 3 1 6 5 4]\n",
      "------------------------------\n",
      "[2 1 3 4 6 5 7]\n"
     ]
    }
   ],
   "source": [
    "# Partial Sorts: Partitioning\n",
    "x = np.array([7, 2, 3, 1, 6, 5, 4])   \n",
    "print(x)\n",
    "print(\"------------------------------\")\n",
    "a = np.partition(x, 3)\n",
    "print(a)\n",
    "\n",
    "# NumPy provides this in the np.partition function. \n",
    "# np.partition takes an array and a number K; the result is a new array with the smallest K values to the left of the partition,\n",
    "# and the remaining values to the right, in arbitrary order:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3 4 7 7 8 8]\n",
      " [1 3 5 8 8 6]\n",
      " [2 3 3 3 6 5]\n",
      " [1 2 5 6 5 5]]\n"
     ]
    }
   ],
   "source": [
    "b = np.partition(X, 2, axis=1)\n",
    "print(b)"
   ]
  }
 ],
 "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}