{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a21ede8e",
   "metadata": {},
   "source": [
    "# Re-shaping numpy arrays to flat 1D\n",
    "The CIFAR10 dataset is available in several formats as we know. Eg The images stored in appropriate sub-folders, as csv files, as an archive, etc. This short notebook demonstrates a way  to reshape the datset loaded from keras' datasets.\n",
    "It reshapes these from (10000,32,32,3) to (10000,3072). That is, samples are stored as rows of 32*32 R values, followed by 32*32 G values then 32*32 B values.\n",
    "\n",
    "A. Krizhevsky, 2009, \u0010Learning multiple layers of features from tiny images\u0011, Master's Thesis, Department\n",
    "of Computer Science, University of Toronto"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4e4eb15d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2.11.0'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "import numpy as np\n",
    "keras.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "26df7681",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2.11.0'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "88743e4f",
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.keras.datasets.cifar10.load_data()\n",
    "Cifar10=keras.datasets.cifar10\n",
    "#fashion_mnist=keras.datasets.fashion_mnist\n",
    "(X_train_full, y_train_full),(X_test,y_test) = Cifar10.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "eacdb15b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10000, 32, 32, 3)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[[[158, 112,  49],\n",
       "         [159, 111,  47],\n",
       "         [165, 116,  51],\n",
       "         ...,\n",
       "         [137,  95,  36],\n",
       "         [126,  91,  36],\n",
       "         [116,  85,  33]],\n",
       "\n",
       "        [[152, 112,  51],\n",
       "         [151, 110,  40],\n",
       "         [159, 114,  45],\n",
       "         ...,\n",
       "         [136,  95,  31],\n",
       "         [125,  91,  32],\n",
       "         [119,  88,  34]],\n",
       "\n",
       "        [[151, 110,  47],\n",
       "         [151, 109,  33],\n",
       "         [158, 111,  36],\n",
       "         ...,\n",
       "         [139,  98,  34],\n",
       "         [130,  95,  34],\n",
       "         [120,  89,  33]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 68, 124, 177],\n",
       "         [ 42, 100, 148],\n",
       "         [ 31,  88, 137],\n",
       "         ...,\n",
       "         [ 38,  97, 146],\n",
       "         [ 13,  64, 108],\n",
       "         [ 40,  85, 127]],\n",
       "\n",
       "        [[ 61, 116, 168],\n",
       "         [ 49, 102, 148],\n",
       "         [ 35,  85, 132],\n",
       "         ...,\n",
       "         [ 26,  82, 130],\n",
       "         [ 29,  82, 126],\n",
       "         [ 20,  64, 107]],\n",
       "\n",
       "        [[ 54, 107, 160],\n",
       "         [ 56, 105, 149],\n",
       "         [ 45,  89, 132],\n",
       "         ...,\n",
       "         [ 24,  77, 124],\n",
       "         [ 34,  84, 129],\n",
       "         [ 21,  67, 110]]],\n",
       "\n",
       "\n",
       "       [[[235, 235, 235],\n",
       "         [231, 231, 231],\n",
       "         [232, 232, 232],\n",
       "         ...,\n",
       "         [233, 233, 233],\n",
       "         [233, 233, 233],\n",
       "         [232, 232, 232]],\n",
       "\n",
       "        [[238, 238, 238],\n",
       "         [235, 235, 235],\n",
       "         [235, 235, 235],\n",
       "         ...,\n",
       "         [236, 236, 236],\n",
       "         [236, 236, 236],\n",
       "         [235, 235, 235]],\n",
       "\n",
       "        [[237, 237, 237],\n",
       "         [234, 234, 234],\n",
       "         [234, 234, 234],\n",
       "         ...,\n",
       "         [235, 235, 235],\n",
       "         [235, 235, 235],\n",
       "         [234, 234, 234]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 87,  99,  89],\n",
       "         [ 43,  51,  37],\n",
       "         [ 19,  23,  11],\n",
       "         ...,\n",
       "         [169, 184, 179],\n",
       "         [182, 197, 193],\n",
       "         [188, 202, 201]],\n",
       "\n",
       "        [[ 82,  96,  82],\n",
       "         [ 46,  57,  36],\n",
       "         [ 36,  44,  22],\n",
       "         ...,\n",
       "         [174, 189, 183],\n",
       "         [185, 200, 196],\n",
       "         [187, 202, 200]],\n",
       "\n",
       "        [[ 85, 101,  83],\n",
       "         [ 62,  75,  48],\n",
       "         [ 58,  67,  38],\n",
       "         ...,\n",
       "         [168, 183, 178],\n",
       "         [180, 195, 191],\n",
       "         [186, 200, 199]]],\n",
       "\n",
       "\n",
       "       [[[158, 190, 222],\n",
       "         [158, 187, 218],\n",
       "         [139, 166, 194],\n",
       "         ...,\n",
       "         [228, 231, 234],\n",
       "         [237, 239, 243],\n",
       "         [238, 241, 246]],\n",
       "\n",
       "        [[170, 200, 229],\n",
       "         [172, 199, 226],\n",
       "         [151, 176, 201],\n",
       "         ...,\n",
       "         [232, 232, 236],\n",
       "         [246, 246, 250],\n",
       "         [246, 247, 251]],\n",
       "\n",
       "        [[174, 201, 225],\n",
       "         [176, 200, 222],\n",
       "         [157, 179, 199],\n",
       "         ...,\n",
       "         [230, 229, 232],\n",
       "         [250, 249, 251],\n",
       "         [245, 244, 247]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 31,  40,  45],\n",
       "         [ 30,  39,  44],\n",
       "         [ 26,  35,  40],\n",
       "         ...,\n",
       "         [ 37,  40,  46],\n",
       "         [  9,  13,  14],\n",
       "         [  4,   7,   5]],\n",
       "\n",
       "        [[ 23,  34,  39],\n",
       "         [ 27,  38,  43],\n",
       "         [ 25,  36,  41],\n",
       "         ...,\n",
       "         [ 19,  20,  24],\n",
       "         [  4,   6,   3],\n",
       "         [  5,   7,   3]],\n",
       "\n",
       "        [[ 28,  41,  47],\n",
       "         [ 30,  43,  50],\n",
       "         [ 32,  45,  52],\n",
       "         ...,\n",
       "         [  5,   6,   8],\n",
       "         [  4,   5,   3],\n",
       "         [  7,   8,   7]]],\n",
       "\n",
       "\n",
       "       ...,\n",
       "\n",
       "\n",
       "       [[[ 20,  15,  12],\n",
       "         [ 19,  14,  11],\n",
       "         [ 15,  14,  11],\n",
       "         ...,\n",
       "         [ 10,   9,   7],\n",
       "         [ 12,  11,   9],\n",
       "         [ 13,  12,  10]],\n",
       "\n",
       "        [[ 21,  16,  13],\n",
       "         [ 20,  16,  13],\n",
       "         [ 18,  17,  12],\n",
       "         ...,\n",
       "         [ 10,   9,   7],\n",
       "         [ 10,   9,   7],\n",
       "         [ 12,  11,   9]],\n",
       "\n",
       "        [[ 21,  16,  13],\n",
       "         [ 21,  17,  12],\n",
       "         [ 20,  18,  11],\n",
       "         ...,\n",
       "         [ 12,  11,   9],\n",
       "         [ 12,  11,   9],\n",
       "         [ 13,  12,  10]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 33,  25,  13],\n",
       "         [ 34,  26,  15],\n",
       "         [ 34,  26,  15],\n",
       "         ...,\n",
       "         [ 28,  25,  52],\n",
       "         [ 29,  25,  58],\n",
       "         [ 23,  20,  42]],\n",
       "\n",
       "        [[ 33,  25,  14],\n",
       "         [ 34,  26,  15],\n",
       "         [ 34,  26,  15],\n",
       "         ...,\n",
       "         [ 27,  24,  52],\n",
       "         [ 27,  24,  56],\n",
       "         [ 25,  22,  47]],\n",
       "\n",
       "        [[ 31,  23,  12],\n",
       "         [ 32,  24,  13],\n",
       "         [ 33,  25,  14],\n",
       "         ...,\n",
       "         [ 24,  23,  50],\n",
       "         [ 26,  23,  53],\n",
       "         [ 25,  20,  47]]],\n",
       "\n",
       "\n",
       "       [[[ 25,  40,  12],\n",
       "         [ 15,  36,   3],\n",
       "         [ 23,  41,  18],\n",
       "         ...,\n",
       "         [ 61,  82,  78],\n",
       "         [ 92, 113, 112],\n",
       "         [ 75,  89,  92]],\n",
       "\n",
       "        [[ 12,  25,   6],\n",
       "         [ 20,  37,   7],\n",
       "         [ 24,  36,  15],\n",
       "         ...,\n",
       "         [115, 134, 138],\n",
       "         [149, 168, 177],\n",
       "         [104, 117, 131]],\n",
       "\n",
       "        [[ 12,  25,  11],\n",
       "         [ 15,  29,   6],\n",
       "         [ 34,  40,  24],\n",
       "         ...,\n",
       "         [154, 172, 182],\n",
       "         [157, 175, 192],\n",
       "         [116, 129, 151]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[100, 129,  81],\n",
       "         [103, 132,  84],\n",
       "         [104, 134,  86],\n",
       "         ...,\n",
       "         [ 97, 128,  84],\n",
       "         [ 98, 126,  84],\n",
       "         [ 91, 121,  79]],\n",
       "\n",
       "        [[103, 132,  83],\n",
       "         [104, 131,  83],\n",
       "         [107, 135,  87],\n",
       "         ...,\n",
       "         [101, 132,  87],\n",
       "         [ 99, 127,  84],\n",
       "         [ 92, 121,  79]],\n",
       "\n",
       "        [[ 95, 126,  78],\n",
       "         [ 95, 123,  76],\n",
       "         [101, 128,  81],\n",
       "         ...,\n",
       "         [ 93, 124,  80],\n",
       "         [ 95, 123,  81],\n",
       "         [ 92, 120,  80]]],\n",
       "\n",
       "\n",
       "       [[[ 73,  78,  75],\n",
       "         [ 98, 103, 113],\n",
       "         [ 99, 106, 114],\n",
       "         ...,\n",
       "         [135, 150, 152],\n",
       "         [135, 149, 154],\n",
       "         [203, 215, 223]],\n",
       "\n",
       "        [[ 69,  73,  70],\n",
       "         [ 84,  89,  97],\n",
       "         [ 68,  75,  81],\n",
       "         ...,\n",
       "         [ 85,  95,  89],\n",
       "         [ 71,  82,  80],\n",
       "         [120, 133, 135]],\n",
       "\n",
       "        [[ 69,  73,  70],\n",
       "         [ 90,  95, 100],\n",
       "         [ 62,  71,  74],\n",
       "         ...,\n",
       "         [ 74,  81,  70],\n",
       "         [ 53,  62,  54],\n",
       "         [ 62,  74,  69]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[123, 128,  96],\n",
       "         [132, 132, 102],\n",
       "         [129, 128, 100],\n",
       "         ...,\n",
       "         [108, 107,  88],\n",
       "         [ 62,  60,  55],\n",
       "         [ 27,  27,  28]],\n",
       "\n",
       "        [[115, 121,  91],\n",
       "         [123, 124,  95],\n",
       "         [129, 126,  99],\n",
       "         ...,\n",
       "         [115, 116,  94],\n",
       "         [ 66,  65,  59],\n",
       "         [ 27,  27,  27]],\n",
       "\n",
       "        [[116, 120,  90],\n",
       "         [121, 122,  94],\n",
       "         [129, 128, 101],\n",
       "         ...,\n",
       "         [116, 115,  94],\n",
       "         [ 68,  65,  58],\n",
       "         [ 27,  26,  26]]]], dtype=uint8)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.shape\n",
    "X_Eg=X_test\n",
    "print(X_Eg.shape)\n",
    "X_Eg\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "99f4a278",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[158, 159, 165, ..., 124, 129, 110],\n",
       "       [235, 231, 232, ..., 178, 191, 199],\n",
       "       [158, 158, 139, ...,   8,   3,   7],\n",
       "       ...,\n",
       "       [ 20,  19,  15, ...,  50,  53,  47],\n",
       "       [ 25,  15,  23, ...,  80,  81,  80],\n",
       "       [ 73,  98,  99, ...,  94,  58,  26]], dtype=uint8)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V=np.swapaxes(X_Eg,2,3)\n",
    "W1=np.ravel(V)\n",
    "W1.reshape(-1,3072)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "78c1dab8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
