{
 "nbformat": 4,
 "nbformat_minor": 2,
 "metadata": {
  "language_info": {
   "name": "python",
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "version": "3.7.3-final"
  },
  "orig_nbformat": 2,
  "file_extension": ".py",
  "mimetype": "text/x-python",
  "name": "python",
  "npconvert_exporter": "python",
  "pygments_lexer": "ipython3",
  "version": 3,
  "kernelspec": {
   "name": "python37364bita178267b7104410b8f4fa90d927b8508",
   "display_name": "Python 3.7.3 64-bit"
  }
 },
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "python内置对象list是一维数组,而numpy提供了n维数组及其运算,其数据类型是ndarray,运算法则依然遵循list方式,对于多维数组、矢量以及矩阵运算非常方便。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[1, 2],\n       [3, 4]])"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将list转换为ndarray\n",
    "np.array([[1,2], [3,4]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[ 0,  1,  2,  3,  4],\n       [ 5,  6,  7,  8,  9],\n       [10, 11, 12, 13, 14],\n       [15, 16, 17, 18, 19],\n       [20, 21, 22, 23, 24]])"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#生成一维序列,再转换为ndarray\n",
    "np.arange(25).reshape(5,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[-0.17294533,  0.57664369,  0.90030628, -1.50687522],\n       [ 0.44645627, -0.007905  , -0.52326875, -0.60296276],\n       [ 0.90004056,  0.76595149, -0.51941328,  0.40380163],\n       [-0.5386898 ,  1.68159334, -0.07916927, -1.28261209]])"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#也可以随机生成多维数组\n",
    "np.random.rand(3,4)\n",
    "#randn生成的数据符合正太分布\n",
    "np.random.randn(4,4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([12.0695157 , 15.28852086, 28.16887606, 23.78457455, 19.43228899,\n       19.4356459 , 29.21877117, 23.19956387, 19.72328742, 18.5866164 ,\n       23.65236814, 22.90528204, 14.61641437, 19.12403056, 18.71734194,\n       21.86738754, 12.61084045, 16.48857546, 10.13327166, 29.18626043,\n       13.52597009, 25.3757283 , 15.02568918, 17.58892082, 29.02929713,\n       19.31601472, 18.70991889, 27.60091717, 17.90855395, 22.32056116,\n       29.66164178, 15.80899303, 13.42051403, 21.63006552, 27.3575489 ,\n       19.15324054, 11.6461633 , 15.2618994 , 17.25711308, 11.15194372,\n       24.7998248 , 20.68732859, 19.61350829, 13.52628516, 20.93910938,\n       18.22947301, 22.55097367, 19.83017006, 28.02903298, 21.88747298,\n       25.62843102, 25.9743397 , 28.41009972, 19.96665695, 12.90643362,\n       10.53082376, 25.83417207, 14.47090988, 12.30504558, 25.61192155,\n       29.43102168, 17.16377112, 25.98836525, 10.56868229, 19.95139715,\n       10.80447219, 18.29030416, 16.87592569, 25.22108043, 25.97517119,\n       13.60687878, 15.40081725, 18.56386783, 29.06878897, 25.60131042,\n       18.75444808, 13.6712598 , 20.53491322, 20.62849974, 24.44350913,\n       22.15870654, 25.66238923, 14.30747784, 20.37187352, 24.98596286,\n       18.57617349, 10.26463449, 11.84077318, 23.86112526, 11.08118911,\n       26.51167248, 19.01538728, 18.25704808, 10.36148126, 10.69855404,\n       18.29660878, 14.1800761 , 27.21586491, 20.89498324, 13.51931409])"
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#区间采样:[start, end]\n",
    "np.random.uniform(10, 30, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[1., 1.],\n       [1., 1.]])"
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全为1的数组\n",
    "np.ones((2,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0., 0.],\n       [0., 0.]])"
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#全为0的数组\n",
    "np.zeros((2,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[0., 1., 0., 0., 0.],\n       [0., 0., 1., 0., 0.],\n       [0., 0., 0., 1., 0.],\n       [0., 0., 0., 0., 1.],\n       [0., 0., 0., 0., 0.]])"
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对角矩阵\n",
    "np.eye(5, 5, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([ 0,  6, 12, 18, 24])"
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#获取对角元素\n",
    "np.diag(np.arange(25).reshape(5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[  2104., 399900.],\n       [  1600., 329900.],\n       [  2400., 369000.],\n       [  1416., 232000.],\n       [  3000., 539900.],\n       [  1985., 299900.],\n       [  1534., 314900.],\n       [  1427., 198999.],\n       [  1380., 212000.],\n       [  1494., 242500.],\n       [  1940., 239999.],\n       [  2000., 347000.],\n       [  1890., 329999.],\n       [  4478., 699900.],\n       [  1268., 259900.],\n       [  2300., 449900.],\n       [  1320., 299900.],\n       [  1236., 199900.],\n       [  2609., 499998.],\n       [  3031., 599000.],\n       [  1767., 252900.],\n       [  1888., 255000.],\n       [  1604., 242900.],\n       [  1962., 259900.],\n       [  3890., 573900.],\n       [  1100., 249900.],\n       [  1458., 464500.],\n       [  2526., 469000.],\n       [  2200., 475000.],\n       [  2637., 299900.],\n       [  1839., 349900.],\n       [  1000., 169900.],\n       [  2040., 314900.],\n       [  3137., 579900.],\n       [  1811., 285900.],\n       [  1437., 249900.],\n       [  1239., 229900.],\n       [  2132., 345000.],\n       [  4215., 549000.],\n       [  2162., 287000.],\n       [  1664., 368500.],\n       [  2238., 329900.],\n       [  2567., 314000.],\n       [  1200., 299000.],\n       [   852., 179900.],\n       [  1852., 299900.],\n       [  1203., 239500.]])"
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#numpy提供了直接加载cvs格式数据的接口。delimiter是指定分隔符,usecols指定选择数据的列\n",
    "filename = 'ex1data2.txt'\n",
    "np.loadtxt(filename, delimiter=',', usecols=(0, 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[ 0,  1],\n       [ 5,  6],\n       [10, 11],\n       [15, 16],\n       [20, 21]])"
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#切片,同样适用于dnarray,list切片语法为[start : end : step],应用到多维则是[start : end : step, start : end : step, ……]\n",
    "dnarr = np.arange(25).reshape(5,5)\n",
    "#选取头两列、所有行的数据\n",
    "dnarr[:, :2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([ 5, 11, 15, 21])"
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#坐标为数组\n",
    "x = [1, 2, 3, 4]\n",
    "y = [0, 1, 0, 1]\n",
    "dnarr[x, y]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[ 1,  2,  3],\n       [11, 12, 13],\n       [21, 22, 23],\n       [31, 32, 33]])"
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式,当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制\n",
    "a = np.array([[ 0, 0, 0],\n",
    "           [10,10,10],\n",
    "           [20,20,20],\n",
    "           [30,30,30]])\n",
    "b = np.array([1,2,3])\n",
    "a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[ 0, 10, 20, 30],\n       [ 0, 10, 20, 30],\n       [ 0, 10, 20, 30]])"
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#翻转矩阵\n",
    "a.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([[2.37861674, 2.24048424, 2.06956704],\n       [2.21845504, 2.45944021, 2.56521539],\n       [2.72539798, 2.51533669, 2.7490997 ]])"
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数组的运算,对数组中的所有元素进行计算,非常方便\n",
    "a = np.random.rand(3,3)\n",
    "b = np.random.rand(3,3)\n",
    "a + b\n",
    "a - b\n",
    "a * b\n",
    "a / b\n",
    "a * 2\n",
    "a + 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "array([0.12640543, 0.14510723, 0.10505695])"
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#统计函数\n",
    "\n",
    "#按轴统计最大最小值\n",
    "np.amax(a, 1)\n",
    "np.amin(a, 0)\n",
    "\n",
    "#最大最小差值\n",
    "np.ptp(a, 0)\n",
    "#中位数\n",
    "np.median(a, 1)\n",
    "#平均值\n",
    "np.mean(a, 1)\n",
    "\n",
    "#方差\n",
    "np.var(a, 1)\n",
    "#标准差\n",
    "np.std(a, 1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "matrix([[0.51150901, 0.0553782 , 0.99089512],\n        [0.51719364, 0.00331011, 0.08076412],\n        [0.66316065, 0.94387314, 0.30780752]])"
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#矩阵\n",
    "import numpy.matlib \n",
    "\n",
    "numpy.matlib.rand(3,3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ]
}