Merge branch 'master' of https://github.com/datawhalechina/team-learning-program
This commit is contained in:
@@ -0,0 +1,617 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"[toc]\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数组的创建\n",
|
||||
"\n",
|
||||
"导入 numpy。\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"import numpy as np\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"numpy 提供的最重要的数据结构是`ndarray`,它是 python 中`list`的扩展。\n",
|
||||
"\n",
|
||||
"## 1. 依据现有数据来创建 ndarray\n",
|
||||
"\n",
|
||||
"### **(a)通过array()函数进行创建。**\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0): \n",
|
||||
"``` \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 创建一维数组\n",
|
||||
"a = np.array([0, 1, 2, 3, 4])\n",
|
||||
"b = np.array((0, 1, 2, 3, 4))\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [0 1 2 3 4] <class 'numpy.ndarray'>\n",
|
||||
"print(b, type(b))\n",
|
||||
"# [0 1 2 3 4] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 创建二维数组\n",
|
||||
"c = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"print(c, type(c))\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 创建三维数组\n",
|
||||
"d = np.array([[(1.5, 2, 3), (4, 5, 6)],\n",
|
||||
" [(3, 2, 1), (4, 5, 6)]])\n",
|
||||
"print(d, type(d))\n",
|
||||
"# [[[1.5 2. 3. ]\n",
|
||||
"# [4. 5. 6. ]]\n",
|
||||
"#\n",
|
||||
"# [[3. 2. 1. ]\n",
|
||||
"# [4. 5. 6. ]]] <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)通过asarray()函数进行创建**\n",
|
||||
"\n",
|
||||
"`array()`和`asarray()`都可以将结构数据转化为 ndarray,但是`array()`和`asarray()`主要区别就是当数据源是**ndarray** 时,`array()`仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 `asarray()`不会。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def asarray(a, dtype=None, order=None):\n",
|
||||
" return array(a, dtype, copy=False, order=order)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`array()`和`asarray()`都可以将结构数据转化为 ndarray\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]\n",
|
||||
"y = np.array(x)\n",
|
||||
"z = np.asarray(x)\n",
|
||||
"x[1][2] = 2\n",
|
||||
"print(x,type(x))\n",
|
||||
"# [[1, 1, 1], [1, 1, 2], [1, 1, 1]] <class 'list'>\n",
|
||||
"\n",
|
||||
"print(y,type(y))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"print(z,type(z))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`array()`和`asarray()`的区别。(`array()`和`asarray()`主要区别就是当数据源是**ndarray** 时,`array()`仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 `asarray()`不会。)\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n",
|
||||
"y = np.array(x)\n",
|
||||
"z = np.asarray(x)\n",
|
||||
"w = np.asarray(x, dtype=np.int)\n",
|
||||
"x[1][2] = 2\n",
|
||||
"print(x,type(x),x.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(y,type(y),y.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(z,type(z),z.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(w,type(w),w.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】更改为较大的dtype时,其大小必须是array的最后一个axis的总大小(以字节为单位)的除数\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n",
|
||||
"print(x, x.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] int32\n",
|
||||
"x.dtype = np.float\n",
|
||||
"\n",
|
||||
"# ValueError: When changing to a larger dtype, its size must be a divisor of the total size in bytes of the last axis of the array.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(c)通过fromfunction()函数进行创建**\n",
|
||||
"\n",
|
||||
"给函数绘图的时候可能会用到`fromfunction()`,该函数可从函数中创建数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def fromfunction(function, shape, **kwargs):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】通过在每个坐标上执行一个函数来构造数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"def f(x, y):\n",
|
||||
" return 10 * x + y\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(f, (5, 4), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [10 11 12 13]\n",
|
||||
"# [20 21 22 23]\n",
|
||||
"# [30 31 32 33]\n",
|
||||
"# [40 41 42 43]]\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(lambda i, j: i == j, (3, 3), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[ True False False]\n",
|
||||
"# [False True False]\n",
|
||||
"# [False False True]]\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [1 2 3]\n",
|
||||
"# [2 3 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 2. 依据 ones 和 zeros 填充方式\n",
|
||||
"\n",
|
||||
"在机器学习任务中经常做的一件事就是初始化参数,需要用常数值或者随机值来创建一个固定大小的矩阵。\n",
|
||||
"\n",
|
||||
"### **(a)零数组**\n",
|
||||
"\n",
|
||||
"- `zeros()`函数:返回给定形状和类型的零数组。\n",
|
||||
"- `zeros_like()`函数:返回与给定数组形状和类型相同的零数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def zeros(shape, dtype=None, order='C'):\n",
|
||||
"def zeros_like(a, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.zeros(5)\n",
|
||||
"print(x) # [0. 0. 0. 0. 0.]\n",
|
||||
"x = np.zeros([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[0. 0. 0.]\n",
|
||||
"# [0. 0. 0.]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.zeros_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[0 0 0]\n",
|
||||
"# [0 0 0]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)1数组**\n",
|
||||
"\n",
|
||||
"- `ones()`函数:返回给定形状和类型的1数组。\n",
|
||||
"- `ones_like()`函数:返回与给定数组形状和类型相同的1数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def ones(shape, dtype=None, order='C'):\n",
|
||||
"def ones_like(a, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.ones(5)\n",
|
||||
"print(x) # [1. 1. 1. 1. 1.]\n",
|
||||
"x = np.ones([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 1. 1.]\n",
|
||||
"# [1. 1. 1.]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.ones_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(c)空数组**\n",
|
||||
"\n",
|
||||
"- `empty()`函数:返回一个空数组,数组元素为随机数。\n",
|
||||
"- `empty_like`函数:返回与给定数组具有相同形状和类型的新数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def empty(shape, dtype=None, order='C'): \n",
|
||||
"def empty_like(prototype, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.empty(5)\n",
|
||||
"print(x)\n",
|
||||
"# [1.95821574e-306 1.60219035e-306 1.37961506e-306 \n",
|
||||
"# 9.34609790e-307 1.24610383e-306]\n",
|
||||
"\n",
|
||||
"x = np.empty((3, 2))\n",
|
||||
"print(x)\n",
|
||||
"# [[1.60220393e-306 9.34587382e-307]\n",
|
||||
"# [8.45599367e-307 7.56598449e-307]\n",
|
||||
"# [1.33509389e-306 3.59412896e-317]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.empty_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 7209029 6422625 6619244]\n",
|
||||
"# [ 100 707539280 504]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(d)单位数组**\n",
|
||||
"\n",
|
||||
"- `eye()`函数:返回一个对角线上为1,其它地方为零的单位数组。\n",
|
||||
"- `identity()`函数:返回一个方的单位数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def eye(N, M=None, k=0, dtype=float, order='C'):\n",
|
||||
"def identity(n, dtype=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.eye(4)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0. 0.]\n",
|
||||
"# [0. 1. 0. 0.]\n",
|
||||
"# [0. 0. 1. 0.]\n",
|
||||
"# [0. 0. 0. 1.]]\n",
|
||||
"\n",
|
||||
"x = np.eye(2, 3)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0.]\n",
|
||||
"# [0. 1. 0.]]\n",
|
||||
"\n",
|
||||
"x = np.identity(4)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0. 0.]\n",
|
||||
"# [0. 1. 0. 0.]\n",
|
||||
"# [0. 0. 1. 0.]\n",
|
||||
"# [0. 0. 0. 1.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(e)对角数组**\n",
|
||||
"\n",
|
||||
"- `diag()`函数:提取对角线或构造对角数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def diag(v, k=0):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(9).reshape((3, 3))\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"print(np.diag(x)) # [0 4 8]\n",
|
||||
"print(np.diag(x, k=1)) # [1 5]\n",
|
||||
"print(np.diag(x, k=-1)) # [3 7]\n",
|
||||
"\n",
|
||||
"v = [1, 3, 5, 7]\n",
|
||||
"x = np.diag(v)\n",
|
||||
"print(x)\n",
|
||||
"# [[1 0 0 0]\n",
|
||||
"# [0 3 0 0]\n",
|
||||
"# [0 0 5 0]\n",
|
||||
"# [0 0 0 7]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(f)常数数组**\n",
|
||||
"\n",
|
||||
"- `full()`函数:返回一个常数数组。\n",
|
||||
"- `full_like()`函数:返回与给定数组具有相同形状和类型的常数数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def full(shape, fill_value, dtype=None, order='C'):\n",
|
||||
"def full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.full((2,), 7)\n",
|
||||
"print(x)\n",
|
||||
"# [7 7]\n",
|
||||
"\n",
|
||||
"x = np.full(2, 7)\n",
|
||||
"print(x)\n",
|
||||
"# [7 7]\n",
|
||||
"\n",
|
||||
"x = np.full((2, 7), 7)\n",
|
||||
"print(x)\n",
|
||||
"# [[7 7 7 7 7 7 7]\n",
|
||||
"# [7 7 7 7 7 7 7]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.full_like(x, 7)\n",
|
||||
"print(y)\n",
|
||||
"# [[7 7 7]\n",
|
||||
"# [7 7 7]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 3. 利用数值范围来创建ndarray\n",
|
||||
" - `arange()`函数:返回给定间隔内的均匀间隔的值。\n",
|
||||
" - `linspace()`函数:返回指定间隔内的等间隔数字。\n",
|
||||
" - `logspace()`函数:返回数以对数刻度均匀分布。\n",
|
||||
" - `numpy.random.rand()` 返回一个由[0,1)内的随机数组成的数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def arange([start,] stop[, step,], dtype=None): \n",
|
||||
"def linspace(start, stop, num=50, endpoint=True, retstep=False, \n",
|
||||
" dtype=None, axis=0):\n",
|
||||
"def logspace(start, stop, num=50, endpoint=True, base=10.0, \n",
|
||||
" dtype=None, axis=0):\n",
|
||||
"def rand(d0, d1, ..., dn): \n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(5)\n",
|
||||
"print(x) # [0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"x = np.arange(3, 7, 2)\n",
|
||||
"print(x) # [3 5]\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=2, num=9)\n",
|
||||
"print(x) \n",
|
||||
"# [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]\n",
|
||||
"\n",
|
||||
"x = np.logspace(0, 1, 5)\n",
|
||||
"print(np.around(x, 2))\n",
|
||||
"# [ 1. 1.78 3.16 5.62 10. ] \n",
|
||||
" #np.around 返回四舍五入后的值,可指定精度。\n",
|
||||
" # around(a, decimals=0, out=None)\n",
|
||||
" # a 输入数组\n",
|
||||
" # decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=1, num=5)\n",
|
||||
"x = [10 ** i for i in x]\n",
|
||||
"print(np.around(x, 2))\n",
|
||||
"# [ 1. 1.78 3.16 5.62 10. ]\n",
|
||||
"\n",
|
||||
"x = np.random.random(5)\n",
|
||||
"print(x)\n",
|
||||
"# [0.41768753 0.16315577 0.80167915 0.99690199 0.11812291]\n",
|
||||
"\n",
|
||||
"x = np.random.random([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[0.41151858 0.93785153 0.57031309]\n",
|
||||
"# [0.13482333 0.20583516 0.45429181]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 4. 结构数组的创建\n",
|
||||
"\n",
|
||||
"结构数组,首先需要定义结构,然后利用`np.array()`来创建数组,其参数`dtype`为定义的结构。\n",
|
||||
"\n",
|
||||
"### **(a)利用字典来定义结构**\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"personType = np.dtype({\n",
|
||||
" 'names': ['name', 'age', 'weight'],\n",
|
||||
" 'formats': ['U30', 'i8', 'f8']})\n",
|
||||
"\n",
|
||||
"a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],\n",
|
||||
" dtype=personType)\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)利用包含多个元组的列表来定义结构**\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"personType = np.dtype([('name', 'U30'), ('age', 'i8'), ('weight', 'f8')])\n",
|
||||
"a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],\n",
|
||||
" dtype=personType)\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 结构数组的取值方式和一般数组差不多,可以通过下标取得元素:\n",
|
||||
"print(a[0])\n",
|
||||
"# ('Liming', 24, 63.9)\n",
|
||||
"\n",
|
||||
"print(a[-2:])\n",
|
||||
"# [('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"\n",
|
||||
"# 我们可以使用字段名作为下标获取对应的值\n",
|
||||
"print(a['name'])\n",
|
||||
"# ['Liming' 'Mike' 'Jan']\n",
|
||||
"print(a['age'])\n",
|
||||
"# [24 15 34]\n",
|
||||
"print(a['weight'])\n",
|
||||
"# [63.9 67. 45.8]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数组的属性\n",
|
||||
"\n",
|
||||
"在使用 numpy 时,你会想知道数组的某些信息。很幸运,在这个包里边包含了很多便捷的方法,可以给你想要的信息。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" - `numpy.ndarray.ndim`用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。\n",
|
||||
" - `numpy.ndarray.shape`表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 `ndim` 属性(秩)。\n",
|
||||
" - `numpy.ndarray.size`数组中所有元素的总量,相当于数组的`shape`中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。\n",
|
||||
" - `numpy.ndarray.dtype` `ndarray` 对象的元素类型。\n",
|
||||
" - `numpy.ndarray.itemsize`以字节的形式返回数组中每一个元素的大小。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"class ndarray(object):\n",
|
||||
" shape = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" dtype = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" size = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" ndim = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" itemsize = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"print(a.shape) # (5,)\n",
|
||||
"print(a.dtype) # int32\n",
|
||||
"print(a.size) # 5\n",
|
||||
"print(a.ndim) # 1\n",
|
||||
"print(a.itemsize) # 4\n",
|
||||
"\n",
|
||||
"b = np.array([[1, 2, 3], [4, 5, 6.0]])\n",
|
||||
"print(b.shape) # (2, 3)\n",
|
||||
"print(b.dtype) # float64\n",
|
||||
"print(b.size) # 6\n",
|
||||
"print(b.ndim) # 2\n",
|
||||
"print(b.itemsize) # 8\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"在`ndarray`中所有元素必须是同一类型,否则会自动向下转换,`int->float->str`。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"print(a) # [1 2 3 4 5]\n",
|
||||
"b = np.array([1, 2, 3, 4, '5'])\n",
|
||||
"print(b) # ['1' '2' '3' '4' '5']\n",
|
||||
"c = np.array([1, 2, 3, 4, 5.0])\n",
|
||||
"print(c) # [1. 2. 3. 4. 5.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.188px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
148
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/01常量.ipynb
Normal file
148
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/01常量.ipynb
Normal file
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 常量\n",
|
||||
"\n",
|
||||
"## numpy.nan\n",
|
||||
"\n",
|
||||
"- 表示空值。\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"nan = NaN = NAN\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】两个`numpy.nan`是不相等的。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"print(np.nan == np.nan) # False\n",
|
||||
"print(np.nan != np.nan) # True\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.isnan(x, *args, **kwargs)` Test element-wise for NaN and return result as a boolean array.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 1, 8, np.nan, 10])\n",
|
||||
"print(x)\n",
|
||||
"# [ 1. 1. 8. nan 10.]\n",
|
||||
"\n",
|
||||
"y = np.isnan(x)\n",
|
||||
"print(y)\n",
|
||||
"# [False False False True False]\n",
|
||||
"\n",
|
||||
"z = np.count_nonzero(y)\n",
|
||||
"print(z) # 1\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## numpy.inf\n",
|
||||
"- 表示正无穷大。\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"Inf = inf = infty = Infinity = PINF\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## numpy.pi\n",
|
||||
"\n",
|
||||
"- 表示圆周率\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"pi = 3.1415926535897932384626433...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## numpy.e\n",
|
||||
"\n",
|
||||
"- 表示自然常数\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"e = 2.71828182845904523536028747135266249775724709369995...\n",
|
||||
"```\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
250
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/02数据类型.ipynb
Normal file
250
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/02数据类型.ipynb
Normal file
@@ -0,0 +1,250 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 数据类型\n",
|
||||
"\n",
|
||||
"## 常见数据类型\n",
|
||||
"\n",
|
||||
"Python 原生的数据类型相对较少, bool、int、float、str等。这在不需要关心数据在计算机中表示的所有方式的应用中是方便的。然而,对于科学计算,通常需要更多的控制。为了加以区分 numpy 在这些类型名称末尾都加了“_”。\n",
|
||||
"\n",
|
||||
"下表列举了常用 numpy 基本类型。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"类型 | 备注 | 说明 \n",
|
||||
"---|---|---\n",
|
||||
"bool_ = bool8 | 8位 | 布尔类型\n",
|
||||
"int8 = byte | 8位 | 整型\n",
|
||||
"int16 = short |\t16位| 整型\n",
|
||||
"int32 = intc | 32位| 整型\n",
|
||||
"int_ = int64 = long = int0 = intp | 64位| 整型\n",
|
||||
"uint8 = ubyte |8位 | 无符号整型\n",
|
||||
"uint16 = ushort|16位| 无符号整型\n",
|
||||
"uint32 = uintc|32位| 无符号整型\n",
|
||||
"uint64 = uintp = uint0 = uint| 64位| 无符号整型\n",
|
||||
"float16 = half|16位 | 浮点型\n",
|
||||
"float32 = single| 32位| 浮点型\n",
|
||||
"float_ = float64 = double| 64位| 浮点型\n",
|
||||
"str_ = unicode_ = str0 = unicode| |Unicode 字符串\n",
|
||||
"datetime64| |日期时间类型\n",
|
||||
"timedelta64| |表示两个时间之间的间隔\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 创建数据类型\n",
|
||||
"\n",
|
||||
"numpy 的数值类型实际上是 dtype 对象的实例。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"class dtype(object):\n",
|
||||
" def __init__(self, obj, align=False, copy=False):\n",
|
||||
" pass\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"每个内建类型都有一个唯一定义它的字符代码,如下:\n",
|
||||
"\n",
|
||||
"字符 | \t对应类型|备注\n",
|
||||
"---|---|---\n",
|
||||
"b\t|boolean | 'b1'\n",
|
||||
"i\t|signed integer | 'i1', 'i2', 'i4', 'i8'\n",
|
||||
"u\t|unsigned integer | 'u1', 'u2' ,'u4' ,'u8'\n",
|
||||
"f\t|floating-point | 'f2', 'f4', 'f8'\n",
|
||||
"c\t|complex floating-point |\n",
|
||||
"m\t|timedelta64 |表示两个时间之间的间隔\n",
|
||||
"M\t|datetime64 |日期时间类型\n",
|
||||
"O\t|object |\n",
|
||||
"S\t|(byte-)string | S3表示长度为3的字符串\n",
|
||||
"U\t|Unicode | Unicode 字符串\n",
|
||||
"V\t|void\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.dtype('b1')\n",
|
||||
"print(a.type) # <class 'numpy.bool_'>\n",
|
||||
"print(a.itemsize) # 1\n",
|
||||
"\n",
|
||||
"a = np.dtype('i1')\n",
|
||||
"print(a.type) # <class 'numpy.int8'>\n",
|
||||
"print(a.itemsize) # 1\n",
|
||||
"a = np.dtype('i2')\n",
|
||||
"print(a.type) # <class 'numpy.int16'>\n",
|
||||
"print(a.itemsize) # 2\n",
|
||||
"a = np.dtype('i4')\n",
|
||||
"print(a.type) # <class 'numpy.int32'>\n",
|
||||
"print(a.itemsize) # 4\n",
|
||||
"a = np.dtype('i8')\n",
|
||||
"print(a.type) # <class 'numpy.int64'>\n",
|
||||
"print(a.itemsize) # 8\n",
|
||||
"\n",
|
||||
"a = np.dtype('u1')\n",
|
||||
"print(a.type) # <class 'numpy.uint8'>\n",
|
||||
"print(a.itemsize) # 1\n",
|
||||
"a = np.dtype('u2')\n",
|
||||
"print(a.type) # <class 'numpy.uint16'>\n",
|
||||
"print(a.itemsize) # 2\n",
|
||||
"a = np.dtype('u4')\n",
|
||||
"print(a.type) # <class 'numpy.uint32'>\n",
|
||||
"print(a.itemsize) # 4\n",
|
||||
"a = np.dtype('u8')\n",
|
||||
"print(a.type) # <class 'numpy.uint64'>\n",
|
||||
"print(a.itemsize) # 8\n",
|
||||
"\n",
|
||||
"a = np.dtype('f2')\n",
|
||||
"print(a.type) # <class 'numpy.float16'>\n",
|
||||
"print(a.itemsize) # 2\n",
|
||||
"a = np.dtype('f4')\n",
|
||||
"print(a.type) # <class 'numpy.float32'>\n",
|
||||
"print(a.itemsize) # 4\n",
|
||||
"a = np.dtype('f8')\n",
|
||||
"print(a.type) # <class 'numpy.float64'>\n",
|
||||
"print(a.itemsize) # 8\n",
|
||||
"\n",
|
||||
"a = np.dtype('S')\n",
|
||||
"print(a.type) # <class 'numpy.bytes_'>\n",
|
||||
"print(a.itemsize) # 0\n",
|
||||
"a = np.dtype('S3')\n",
|
||||
"print(a.type) # <class 'numpy.bytes_'>\n",
|
||||
"print(a.itemsize) # 3\n",
|
||||
"\n",
|
||||
"a = np.dtype('U3')\n",
|
||||
"print(a.type) # <class 'numpy.str_'>\n",
|
||||
"print(a.itemsize) # 12\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## 数据类型信息\n",
|
||||
"\n",
|
||||
"Python 的浮点数通常是64位浮点数,几乎等同于 `np.float64`。\n",
|
||||
"\n",
|
||||
"NumPy和Python整数类型的行为在整数溢出方面存在显着差异,与 NumPy 不同,Python 的`int` 是灵活的。这意味着Python整数可以扩展以容纳任何整数并且不会溢出。\n",
|
||||
"\n",
|
||||
"Machine limits for integer types.\n",
|
||||
"```python\n",
|
||||
"class iinfo(object):\n",
|
||||
" def __init__(self, int_type):\n",
|
||||
" pass\n",
|
||||
" def min(self):\n",
|
||||
" pass\n",
|
||||
" def max(self):\n",
|
||||
" pass\n",
|
||||
"```\n",
|
||||
"【例】\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ii16 = np.iinfo(np.int16)\n",
|
||||
"print(ii16.min) # -32768\n",
|
||||
"print(ii16.max) # 32767\n",
|
||||
"\n",
|
||||
"ii32 = np.iinfo(np.int32)\n",
|
||||
"print(ii32.min) # -2147483648\n",
|
||||
"print(ii32.max) # 2147483647\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Machine limits for floating point types.\n",
|
||||
"```python\n",
|
||||
"class finfo(object):\n",
|
||||
" def _init(self, dtype):\n",
|
||||
"```\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ff16 = np.finfo(np.float16)\n",
|
||||
"print(ff16.bits) # 16\n",
|
||||
"print(ff16.min) # -65500.0\n",
|
||||
"print(ff16.max) # 65500.0\n",
|
||||
"print(ff16.eps) # 0.000977\n",
|
||||
"\n",
|
||||
"ff32 = np.finfo(np.float32)\n",
|
||||
"print(ff32.bits) # 32\n",
|
||||
"print(ff32.min) # -3.4028235e+38\n",
|
||||
"print(ff32.max) # 3.4028235e+38\n",
|
||||
"print(ff32.eps) # 1.1920929e-07\n",
|
||||
"```\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "218.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
356
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/03时间日期和时间增量.ipynb
Normal file
356
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/03时间日期和时间增量.ipynb
Normal file
@@ -0,0 +1,356 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 时间日期和时间增量\n",
|
||||
"\n",
|
||||
"## datetime64 基础\n",
|
||||
"\n",
|
||||
"在 numpy 中,我们很方便的将字符串转换成时间日期类型 `datetime64`(`datetime` 已被 python 包含的日期时间库所占用)。\n",
|
||||
"\n",
|
||||
"`datatime64`是带单位的日期时间类型,其单位如下:\n",
|
||||
"\n",
|
||||
"日期单位 | 代码含义|时间单位 | 代码含义\n",
|
||||
":---:|:---:|:---:|:---:\n",
|
||||
"Y | 年 |h | 小时\n",
|
||||
"M | 月 |m | 分钟\n",
|
||||
"W | 周 |s | 秒\n",
|
||||
"D | 天 |ms | 毫秒\n",
|
||||
"- | - |us | 微秒\n",
|
||||
"- | - |ns | 纳秒\n",
|
||||
"- | - |ps | 皮秒\n",
|
||||
"- | - |fs | 飞秒\n",
|
||||
"- | - |as | 阿托秒\n",
|
||||
"\n",
|
||||
"注意:\n",
|
||||
"- 1秒 = 1000 毫秒(milliseconds)\n",
|
||||
"- 1毫秒 = 1000 微秒(microseconds)\n",
|
||||
"\n",
|
||||
"【例】从字符串创建 datetime64 类型时,默认情况下,numpy 会根据字符串自动选择对应的单位。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03-01')\n",
|
||||
"print(a, a.dtype) # 2020-03-01 datetime64[D]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03')\n",
|
||||
"print(a, a.dtype) # 2020-03 datetime64[M]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03-08 20:00:05')\n",
|
||||
"print(a, a.dtype) # 2020-03-08T20:00:05 datetime64[s]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03-08 20:00')\n",
|
||||
"print(a, a.dtype) # 2020-03-08T20:00 datetime64[m]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03-08 20')\n",
|
||||
"print(a, a.dtype) # 2020-03-08T20 datetime64[h]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】从字符串创建 datetime64 类型时,可以强制指定使用的单位。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03', 'D')\n",
|
||||
"print(a, a.dtype) # 2020-03-01 datetime64[D]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03', 'Y')\n",
|
||||
"print(a, a.dtype) # 2020 datetime64[Y]\n",
|
||||
"\n",
|
||||
"print(np.datetime64('2020-03') == np.datetime64('2020-03-01')) # True\n",
|
||||
"print(np.datetime64('2020-03') == np.datetime64('2020-03-02')) #False\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"由上例可以看出,2019-03 和 2019-03-01 所表示的其实是同一个时间。\n",
|
||||
"事实上,如果两个 datetime64 对象具有不同的单位,它们可能仍然代表相同的时刻。并且从较大的单位(如月份)转换为较小的单位(如天数)是安全的。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】从字符串创建 datetime64 数组时,如果单位不统一,则一律转化成其中最小的单位。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')\n",
|
||||
"print(a, a.dtype)\n",
|
||||
"# ['2020-03-01T00:00' '2020-03-08T00:00' '2020-03-08T20:00'] datetime64[m]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】使用`arange()`创建 datetime64 数组,用于生成日期范围。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.arange('2020-08-01', '2020-08-10', dtype=np.datetime64)\n",
|
||||
"print(a)\n",
|
||||
"# ['2020-08-01' '2020-08-02' '2020-08-03' '2020-08-04' '2020-08-05'\n",
|
||||
"# '2020-08-06' '2020-08-07' '2020-08-08' '2020-08-09']\n",
|
||||
"print(a.dtype) # datetime64[D]\n",
|
||||
"\n",
|
||||
"a = np.arange('2020-08-01 20:00', '2020-08-10', dtype=np.datetime64)\n",
|
||||
"print(a)\n",
|
||||
"# ['2020-08-01T20:00' '2020-08-01T20:01' '2020-08-01T20:02' ...\n",
|
||||
"# '2020-08-09T23:57' '2020-08-09T23:58' '2020-08-09T23:59']\n",
|
||||
"print(a.dtype) # datetime64[m]\n",
|
||||
"\n",
|
||||
"a = np.arange('2020-05', '2020-12', dtype=np.datetime64)\n",
|
||||
"print(a)\n",
|
||||
"# ['2020-05' '2020-06' '2020-07' '2020-08' '2020-09' '2020-10' '2020-11']\n",
|
||||
"print(a.dtype) # datetime64[M]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## datetime64 和 timedelta64 运算\n",
|
||||
"\n",
|
||||
"【例】timedelta64 表示两个 datetime64 之间的差。timedelta64 也是带单位的,并且和相减运算中的两个 datetime64 中的较小的单位保持一致。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03-08') - np.datetime64('2020-03-07')\n",
|
||||
"b = np.datetime64('2020-03-08') - np.datetime64('202-03-07 08:00')\n",
|
||||
"c = np.datetime64('2020-03-08') - np.datetime64('2020-03-07 23:00', 'D')\n",
|
||||
"\n",
|
||||
"print(a, a.dtype) # 1 days timedelta64[D]\n",
|
||||
"print(b, b.dtype) # 956178240 minutes timedelta64[m]\n",
|
||||
"print(c, c.dtype) # 1 days timedelta64[D]\n",
|
||||
"\n",
|
||||
"a = np.datetime64('2020-03') + np.timedelta64(20, 'D')\n",
|
||||
"b = np.datetime64('2020-06-15 00:00') + np.timedelta64(12, 'h')\n",
|
||||
"print(a, a.dtype) # 2020-03-21 datetime64[D]\n",
|
||||
"print(b, b.dtype) # 2020-06-15T12:00 datetime64[m]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】生成 timedelta64时,要注意年('Y')和月('M')这两个单位无法和其它单位进行运算(一年有几天?一个月有几个小时?这些都是不确定的)。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.timedelta64(1, 'Y')\n",
|
||||
"b = np.timedelta64(a, 'M')\n",
|
||||
"print(a) # 1 years\n",
|
||||
"print(b) # 12 months\n",
|
||||
"\n",
|
||||
"c = np.timedelta64(1, 'h')\n",
|
||||
"d = np.timedelta64(c, 'm')\n",
|
||||
"print(c) # 1 hours\n",
|
||||
"print(d) # 60 minutes\n",
|
||||
"\n",
|
||||
"print(np.timedelta64(a, 'D'))\n",
|
||||
"# TypeError: Cannot cast NumPy timedelta64 scalar from metadata [Y] to [D] according to the rule 'same_kind'\n",
|
||||
"\n",
|
||||
"print(np.timedelta64(b, 'D'))\n",
|
||||
"# TypeError: Cannot cast NumPy timedelta64 scalar from metadata [M] to [D] according to the rule 'same_kind'\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】timedelta64 的运算。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.timedelta64(1, 'Y')\n",
|
||||
"b = np.timedelta64(6, 'M')\n",
|
||||
"c = np.timedelta64(1, 'W')\n",
|
||||
"d = np.timedelta64(1, 'D')\n",
|
||||
"e = np.timedelta64(10, 'D')\n",
|
||||
"\n",
|
||||
"print(a) # 1 years\n",
|
||||
"print(b) # 6 months\n",
|
||||
"print(a + b) # 18 months\n",
|
||||
"print(a - b) # 6 months\n",
|
||||
"print(2 * a) # 2 years\n",
|
||||
"print(a / b) # 2.0\n",
|
||||
"print(c / d) # 7.0\n",
|
||||
"print(c % e) # 7 days\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】numpy.datetime64 与 datetime.datetime 相互转换\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"import datetime\n",
|
||||
"\n",
|
||||
"dt = datetime.datetime(year=2020, month=6, day=1, hour=20, minute=5, second=30)\n",
|
||||
"dt64 = np.datetime64(dt, 's')\n",
|
||||
"print(dt64, dt64.dtype)\n",
|
||||
"# 2020-06-01T20:05:30 datetime64[s]\n",
|
||||
"\n",
|
||||
"dt2 = dt64.astype(datetime.datetime)\n",
|
||||
"print(dt2, type(dt2))\n",
|
||||
"# 2020-06-01 20:05:30 <class 'datetime.datetime'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## datetime64 的应用\n",
|
||||
"\n",
|
||||
"为了允许在只有一周中某些日子有效的上下文中使用日期时间,NumPy包含一组“busday”(工作日)功能。\n",
|
||||
"\n",
|
||||
"- `numpy.busday_offset(dates, offsets, roll='raise', weekmask='1111100', holidays=None, busdaycal=None, out=None)` First adjusts the date to fall on a valid day according to the roll rule, then applies offsets to the given dates counted in valid days.\n",
|
||||
"\n",
|
||||
"参数`roll`:{'raise', 'nat', 'forward', 'following', 'backward', 'preceding', 'modifiedfollowing', 'modifiedpreceding'}\n",
|
||||
"- 'raise' means to raise an exception for an invalid day.\n",
|
||||
"- 'nat' means to return a NaT (not-a-time) for an invalid day.\n",
|
||||
"- 'forward' and 'following' mean to take the first valid day later in time.\n",
|
||||
"- 'backward' and 'preceding' mean to take the first valid day earlier in time.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】将指定的偏移量应用于工作日,单位天('D')。计算下一个工作日,如果当前日期为非工作日,默认报错。可以指定 `forward` 或 `backward` 规则来避免报错。(一个是向前取第一个有效的工作日,一个是向后取第一个有效的工作日)\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 2020-07-10 星期五\n",
|
||||
"a = np.busday_offset('2020-07-10', offsets=1)\n",
|
||||
"print(a) # 2020-07-13\n",
|
||||
"\n",
|
||||
"a = np.busday_offset('2020-07-11', offsets=1)\n",
|
||||
"print(a)\n",
|
||||
"# ValueError: Non-business day date in busday_offset\n",
|
||||
"\n",
|
||||
"a = np.busday_offset('2020-07-11', offsets=0, roll='forward')\n",
|
||||
"b = np.busday_offset('2020-07-11', offsets=0, roll='backward')\n",
|
||||
"print(a) # 2020-07-13\n",
|
||||
"print(b) # 2020-07-10\n",
|
||||
"\n",
|
||||
"a = np.busday_offset('2020-07-11', offsets=1, roll='forward')\n",
|
||||
"b = np.busday_offset('2020-07-11', offsets=1, roll='backward')\n",
|
||||
"print(a) # 2020-07-14\n",
|
||||
"print(b) # 2020-07-13\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"可以指定偏移量为 0 来获取当前日期向前或向后最近的工作日,当然,如果当前日期本身就是工作日,则直接返回当前日期。\n",
|
||||
"\n",
|
||||
"- `numpy.is_busday(dates, weekmask='1111100', holidays=None, busdaycal=None, out=None)` Calculates which of the given dates are valid days, and which are not.\n",
|
||||
"\n",
|
||||
"【例】返回指定日期是否是工作日。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 2020-07-10 星期五\n",
|
||||
"a = np.is_busday('2020-07-10')\n",
|
||||
"b = np.is_busday('2020-07-11')\n",
|
||||
"print(a) # True\n",
|
||||
"print(b) # False\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】统计一个 `datetime64[D]` 数组中的工作日天数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 2020-07-10 星期五\n",
|
||||
"begindates = np.datetime64('2020-07-10')\n",
|
||||
"enddates = np.datetime64('2020-07-20')\n",
|
||||
"a = np.arange(begindates, enddates, dtype='datetime64')\n",
|
||||
"b = np.count_nonzero(np.is_busday(a))\n",
|
||||
"print(a)\n",
|
||||
"# ['2020-07-10' '2020-07-11' '2020-07-12' '2020-07-13' '2020-07-14'\n",
|
||||
"# '2020-07-15' '2020-07-16' '2020-07-17' '2020-07-18' '2020-07-19']\n",
|
||||
"print(b) # 6\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】自定义周掩码值,即指定一周中哪些星期是工作日。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 2020-07-10 星期五\n",
|
||||
"a = np.is_busday('2020-07-10', weekmask=[1, 1, 1, 1, 1, 0, 0])\n",
|
||||
"b = np.is_busday('2020-07-10', weekmask=[1, 1, 1, 1, 0, 0, 1])\n",
|
||||
"print(a) # True\n",
|
||||
"print(b) # False\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.busday_count(begindates, enddates, weekmask='1111100', holidays=[], busdaycal=None, out=None)`Counts the number of valid days between `begindates` and `enddates`, not including the day of `enddates`.\n",
|
||||
"\n",
|
||||
"【例】返回两个日期之间的工作日数量。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 2020-07-10 星期五\n",
|
||||
"begindates = np.datetime64('2020-07-10')\n",
|
||||
"enddates = np.datetime64('2020-07-20')\n",
|
||||
"a = np.busday_count(begindates, enddates)\n",
|
||||
"b = np.busday_count(enddates, begindates)\n",
|
||||
"print(a) # 6\n",
|
||||
"print(b) # -6\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"<b>参考图文</b>\n",
|
||||
"\n",
|
||||
"- https://www.jianshu.com/p/336cd77d9914\n",
|
||||
"- https://www.cnblogs.com/gl1573/p/10549547.html#h2datetime64\n",
|
||||
"- https://www.numpy.org.cn/reference/arrays/datetime.html#%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4%E5%8D%95%E4%BD%8D\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
617
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/04数组的创建.ipynb
Normal file
617
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/04数组的创建.ipynb
Normal file
@@ -0,0 +1,617 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"[toc]\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数组的创建\n",
|
||||
"\n",
|
||||
"导入 numpy。\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"import numpy as np\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"numpy 提供的最重要的数据结构是`ndarray`,它是 python 中`list`的扩展。\n",
|
||||
"\n",
|
||||
"## 1. 依据现有数据来创建 ndarray\n",
|
||||
"\n",
|
||||
"### **(a)通过array()函数进行创建。**\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0): \n",
|
||||
"``` \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# 创建一维数组\n",
|
||||
"a = np.array([0, 1, 2, 3, 4])\n",
|
||||
"b = np.array((0, 1, 2, 3, 4))\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [0 1 2 3 4] <class 'numpy.ndarray'>\n",
|
||||
"print(b, type(b))\n",
|
||||
"# [0 1 2 3 4] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 创建二维数组\n",
|
||||
"c = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"print(c, type(c))\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 创建三维数组\n",
|
||||
"d = np.array([[(1.5, 2, 3), (4, 5, 6)],\n",
|
||||
" [(3, 2, 1), (4, 5, 6)]])\n",
|
||||
"print(d, type(d))\n",
|
||||
"# [[[1.5 2. 3. ]\n",
|
||||
"# [4. 5. 6. ]]\n",
|
||||
"#\n",
|
||||
"# [[3. 2. 1. ]\n",
|
||||
"# [4. 5. 6. ]]] <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)通过asarray()函数进行创建**\n",
|
||||
"\n",
|
||||
"`array()`和`asarray()`都可以将结构数据转化为 ndarray,但是`array()`和`asarray()`主要区别就是当数据源是**ndarray** 时,`array()`仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 `asarray()`不会。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def asarray(a, dtype=None, order=None):\n",
|
||||
" return array(a, dtype, copy=False, order=order)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`array()`和`asarray()`都可以将结构数据转化为 ndarray\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]\n",
|
||||
"y = np.array(x)\n",
|
||||
"z = np.asarray(x)\n",
|
||||
"x[1][2] = 2\n",
|
||||
"print(x,type(x))\n",
|
||||
"# [[1, 1, 1], [1, 1, 2], [1, 1, 1]] <class 'list'>\n",
|
||||
"\n",
|
||||
"print(y,type(y))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"print(z,type(z))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`array()`和`asarray()`的区别。(`array()`和`asarray()`主要区别就是当数据源是**ndarray** 时,`array()`仍然会 copy 出一个副本,占用新的内存,但不改变 dtype 时 `asarray()`不会。)\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n",
|
||||
"y = np.array(x)\n",
|
||||
"z = np.asarray(x)\n",
|
||||
"w = np.asarray(x, dtype=np.int)\n",
|
||||
"x[1][2] = 2\n",
|
||||
"print(x,type(x),x.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(y,type(y),y.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(z,type(z),z.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"\n",
|
||||
"print(w,type(w),w.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 2]\n",
|
||||
"# [1 1 1]] <class 'numpy.ndarray'> int32\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】更改为较大的dtype时,其大小必须是array的最后一个axis的总大小(以字节为单位)的除数\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n",
|
||||
"print(x, x.dtype)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]\n",
|
||||
"# [1 1 1]] int32\n",
|
||||
"x.dtype = np.float\n",
|
||||
"\n",
|
||||
"# ValueError: When changing to a larger dtype, its size must be a divisor of the total size in bytes of the last axis of the array.\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(c)通过fromfunction()函数进行创建**\n",
|
||||
"\n",
|
||||
"给函数绘图的时候可能会用到`fromfunction()`,该函数可从函数中创建数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def fromfunction(function, shape, **kwargs):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】通过在每个坐标上执行一个函数来构造数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"def f(x, y):\n",
|
||||
" return 10 * x + y\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(f, (5, 4), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [10 11 12 13]\n",
|
||||
"# [20 21 22 23]\n",
|
||||
"# [30 31 32 33]\n",
|
||||
"# [40 41 42 43]]\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(lambda i, j: i == j, (3, 3), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[ True False False]\n",
|
||||
"# [False True False]\n",
|
||||
"# [False False True]]\n",
|
||||
"\n",
|
||||
"x = np.fromfunction(lambda i, j: i + j, (3, 3), dtype=int)\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [1 2 3]\n",
|
||||
"# [2 3 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 2. 依据 ones 和 zeros 填充方式\n",
|
||||
"\n",
|
||||
"在机器学习任务中经常做的一件事就是初始化参数,需要用常数值或者随机值来创建一个固定大小的矩阵。\n",
|
||||
"\n",
|
||||
"### **(a)零数组**\n",
|
||||
"\n",
|
||||
"- `zeros()`函数:返回给定形状和类型的零数组。\n",
|
||||
"- `zeros_like()`函数:返回与给定数组形状和类型相同的零数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def zeros(shape, dtype=None, order='C'):\n",
|
||||
"def zeros_like(a, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.zeros(5)\n",
|
||||
"print(x) # [0. 0. 0. 0. 0.]\n",
|
||||
"x = np.zeros([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[0. 0. 0.]\n",
|
||||
"# [0. 0. 0.]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.zeros_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[0 0 0]\n",
|
||||
"# [0 0 0]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)1数组**\n",
|
||||
"\n",
|
||||
"- `ones()`函数:返回给定形状和类型的1数组。\n",
|
||||
"- `ones_like()`函数:返回与给定数组形状和类型相同的1数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def ones(shape, dtype=None, order='C'):\n",
|
||||
"def ones_like(a, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.ones(5)\n",
|
||||
"print(x) # [1. 1. 1. 1. 1.]\n",
|
||||
"x = np.ones([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 1. 1.]\n",
|
||||
"# [1. 1. 1.]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.ones_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [1 1 1]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(c)空数组**\n",
|
||||
"\n",
|
||||
"- `empty()`函数:返回一个空数组,数组元素为随机数。\n",
|
||||
"- `empty_like`函数:返回与给定数组具有相同形状和类型的新数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def empty(shape, dtype=None, order='C'): \n",
|
||||
"def empty_like(prototype, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.empty(5)\n",
|
||||
"print(x)\n",
|
||||
"# [1.95821574e-306 1.60219035e-306 1.37961506e-306 \n",
|
||||
"# 9.34609790e-307 1.24610383e-306]\n",
|
||||
"\n",
|
||||
"x = np.empty((3, 2))\n",
|
||||
"print(x)\n",
|
||||
"# [[1.60220393e-306 9.34587382e-307]\n",
|
||||
"# [8.45599367e-307 7.56598449e-307]\n",
|
||||
"# [1.33509389e-306 3.59412896e-317]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.empty_like(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 7209029 6422625 6619244]\n",
|
||||
"# [ 100 707539280 504]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(d)单位数组**\n",
|
||||
"\n",
|
||||
"- `eye()`函数:返回一个对角线上为1,其它地方为零的单位数组。\n",
|
||||
"- `identity()`函数:返回一个方的单位数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def eye(N, M=None, k=0, dtype=float, order='C'):\n",
|
||||
"def identity(n, dtype=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.eye(4)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0. 0.]\n",
|
||||
"# [0. 1. 0. 0.]\n",
|
||||
"# [0. 0. 1. 0.]\n",
|
||||
"# [0. 0. 0. 1.]]\n",
|
||||
"\n",
|
||||
"x = np.eye(2, 3)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0.]\n",
|
||||
"# [0. 1. 0.]]\n",
|
||||
"\n",
|
||||
"x = np.identity(4)\n",
|
||||
"print(x)\n",
|
||||
"# [[1. 0. 0. 0.]\n",
|
||||
"# [0. 1. 0. 0.]\n",
|
||||
"# [0. 0. 1. 0.]\n",
|
||||
"# [0. 0. 0. 1.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(e)对角数组**\n",
|
||||
"\n",
|
||||
"- `diag()`函数:提取对角线或构造对角数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def diag(v, k=0):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(9).reshape((3, 3))\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"print(np.diag(x)) # [0 4 8]\n",
|
||||
"print(np.diag(x, k=1)) # [1 5]\n",
|
||||
"print(np.diag(x, k=-1)) # [3 7]\n",
|
||||
"\n",
|
||||
"v = [1, 3, 5, 7]\n",
|
||||
"x = np.diag(v)\n",
|
||||
"print(x)\n",
|
||||
"# [[1 0 0 0]\n",
|
||||
"# [0 3 0 0]\n",
|
||||
"# [0 0 5 0]\n",
|
||||
"# [0 0 0 7]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(f)常数数组**\n",
|
||||
"\n",
|
||||
"- `full()`函数:返回一个常数数组。\n",
|
||||
"- `full_like()`函数:返回与给定数组具有相同形状和类型的常数数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def full(shape, fill_value, dtype=None, order='C'):\n",
|
||||
"def full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None):\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.full((2,), 7)\n",
|
||||
"print(x)\n",
|
||||
"# [7 7]\n",
|
||||
"\n",
|
||||
"x = np.full(2, 7)\n",
|
||||
"print(x)\n",
|
||||
"# [7 7]\n",
|
||||
"\n",
|
||||
"x = np.full((2, 7), 7)\n",
|
||||
"print(x)\n",
|
||||
"# [[7 7 7 7 7 7 7]\n",
|
||||
"# [7 7 7 7 7 7 7]]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.full_like(x, 7)\n",
|
||||
"print(y)\n",
|
||||
"# [[7 7 7]\n",
|
||||
"# [7 7 7]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 3. 利用数值范围来创建ndarray\n",
|
||||
" - `arange()`函数:返回给定间隔内的均匀间隔的值。\n",
|
||||
" - `linspace()`函数:返回指定间隔内的等间隔数字。\n",
|
||||
" - `logspace()`函数:返回数以对数刻度均匀分布。\n",
|
||||
" - `numpy.random.rand()` 返回一个由[0,1)内的随机数组成的数组。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def arange([start,] stop[, step,], dtype=None): \n",
|
||||
"def linspace(start, stop, num=50, endpoint=True, retstep=False, \n",
|
||||
" dtype=None, axis=0):\n",
|
||||
"def logspace(start, stop, num=50, endpoint=True, base=10.0, \n",
|
||||
" dtype=None, axis=0):\n",
|
||||
"def rand(d0, d1, ..., dn): \n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(5)\n",
|
||||
"print(x) # [0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"x = np.arange(3, 7, 2)\n",
|
||||
"print(x) # [3 5]\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=2, num=9)\n",
|
||||
"print(x) \n",
|
||||
"# [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]\n",
|
||||
"\n",
|
||||
"x = np.logspace(0, 1, 5)\n",
|
||||
"print(np.around(x, 2))\n",
|
||||
"# [ 1. 1.78 3.16 5.62 10. ] \n",
|
||||
" #np.around 返回四舍五入后的值,可指定精度。\n",
|
||||
" # around(a, decimals=0, out=None)\n",
|
||||
" # a 输入数组\n",
|
||||
" # decimals 要舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=1, num=5)\n",
|
||||
"x = [10 ** i for i in x]\n",
|
||||
"print(np.around(x, 2))\n",
|
||||
"# [ 1. 1.78 3.16 5.62 10. ]\n",
|
||||
"\n",
|
||||
"x = np.random.random(5)\n",
|
||||
"print(x)\n",
|
||||
"# [0.41768753 0.16315577 0.80167915 0.99690199 0.11812291]\n",
|
||||
"\n",
|
||||
"x = np.random.random([2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[0.41151858 0.93785153 0.57031309]\n",
|
||||
"# [0.13482333 0.20583516 0.45429181]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 4. 结构数组的创建\n",
|
||||
"\n",
|
||||
"结构数组,首先需要定义结构,然后利用`np.array()`来创建数组,其参数`dtype`为定义的结构。\n",
|
||||
"\n",
|
||||
"### **(a)利用字典来定义结构**\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"personType = np.dtype({\n",
|
||||
" 'names': ['name', 'age', 'weight'],\n",
|
||||
" 'formats': ['U30', 'i8', 'f8']})\n",
|
||||
"\n",
|
||||
"a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],\n",
|
||||
" dtype=personType)\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### **(b)利用包含多个元组的列表来定义结构**\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"personType = np.dtype([('name', 'U30'), ('age', 'i8'), ('weight', 'f8')])\n",
|
||||
"a = np.array([('Liming', 24, 63.9), ('Mike', 15, 67.), ('Jan', 34, 45.8)],\n",
|
||||
" dtype=personType)\n",
|
||||
"print(a, type(a))\n",
|
||||
"# [('Liming', 24, 63.9) ('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"# 结构数组的取值方式和一般数组差不多,可以通过下标取得元素:\n",
|
||||
"print(a[0])\n",
|
||||
"# ('Liming', 24, 63.9)\n",
|
||||
"\n",
|
||||
"print(a[-2:])\n",
|
||||
"# [('Mike', 15, 67. ) ('Jan', 34, 45.8)]\n",
|
||||
"\n",
|
||||
"# 我们可以使用字段名作为下标获取对应的值\n",
|
||||
"print(a['name'])\n",
|
||||
"# ['Liming' 'Mike' 'Jan']\n",
|
||||
"print(a['age'])\n",
|
||||
"# [24 15 34]\n",
|
||||
"print(a['weight'])\n",
|
||||
"# [63.9 67. 45.8]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数组的属性\n",
|
||||
"\n",
|
||||
"在使用 numpy 时,你会想知道数组的某些信息。很幸运,在这个包里边包含了很多便捷的方法,可以给你想要的信息。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" - `numpy.ndarray.ndim`用于返回数组的维数(轴的个数)也称为秩,一维数组的秩为 1,二维数组的秩为 2,以此类推。\n",
|
||||
" - `numpy.ndarray.shape`表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 `ndim` 属性(秩)。\n",
|
||||
" - `numpy.ndarray.size`数组中所有元素的总量,相当于数组的`shape`中所有元素的乘积,例如矩阵的元素总量为行与列的乘积。\n",
|
||||
" - `numpy.ndarray.dtype` `ndarray` 对象的元素类型。\n",
|
||||
" - `numpy.ndarray.itemsize`以字节的形式返回数组中每一个元素的大小。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"class ndarray(object):\n",
|
||||
" shape = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" dtype = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" size = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" ndim = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
" itemsize = property(lambda self: object(), lambda self, v: None, lambda self: None)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"print(a.shape) # (5,)\n",
|
||||
"print(a.dtype) # int32\n",
|
||||
"print(a.size) # 5\n",
|
||||
"print(a.ndim) # 1\n",
|
||||
"print(a.itemsize) # 4\n",
|
||||
"\n",
|
||||
"b = np.array([[1, 2, 3], [4, 5, 6.0]])\n",
|
||||
"print(b.shape) # (2, 3)\n",
|
||||
"print(b.dtype) # float64\n",
|
||||
"print(b.size) # 6\n",
|
||||
"print(b.ndim) # 2\n",
|
||||
"print(b.itemsize) # 8\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"在`ndarray`中所有元素必须是同一类型,否则会自动向下转换,`int->float->str`。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"print(a) # [1 2 3 4 5]\n",
|
||||
"b = np.array([1, 2, 3, 4, '5'])\n",
|
||||
"print(b) # ['1' '2' '3' '4' '5']\n",
|
||||
"c = np.array([1, 2, 3, 4, 5.0])\n",
|
||||
"print(c) # [1. 2. 3. 4. 5.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.188px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
BIN
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/test.jpg
Normal file
BIN
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/test.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
819
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/练习-数组的创建-答案.ipynb
Normal file
819
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/练习-数组的创建-答案.ipynb
Normal file
@@ -0,0 +1,819 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**什么是numpy?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"numpy是python中基于数组对象的科学计算库。\n",
|
||||
"提炼关键字,可以得出numpy以下三大特点:\n",
|
||||
"拥有n维数组对象;\n",
|
||||
"拥有广播功能(后面讲到);\n",
|
||||
"拥有各种科学计算API,任你调用;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**如何安装numpy?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"因为numpy是一个python库,所以使用python包管理工具pip或者conda都可以安装。\n",
|
||||
"安装python后,打开cmd命令行,输入:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"#pip install numpy"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**什么是n维数组对象?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"n维数组(ndarray)对象,是一系列同类数据的集合,可以进行索引、切片、迭代操作。\n",
|
||||
"numpy中可以使用array函数创建数组:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:37:45.921044Z",
|
||||
"start_time": "2020-09-04T05:37:45.912067Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([1, 2, 3])"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"np.array([1,2,3])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**如何区分一维、二维、多维?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"判断一个数组是几维,主要是看它有几个轴(axis)。\n",
|
||||
"\n",
|
||||
"一个轴表示一维数组,两个轴表示二维数组,以此类推。\n",
|
||||
"\n",
|
||||
"每个轴都代表一个一维数组。\n",
|
||||
"\n",
|
||||
"比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。\n",
|
||||
"\n",
|
||||
"一维数组一个轴:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:38:56.810220Z",
|
||||
"start_time": "2020-09-04T05:38:56.807228Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[1, 2, 3]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"[1,2,3]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"二维数组两个轴:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:39:21.661540Z",
|
||||
"start_time": "2020-09-04T05:39:21.657550Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[0, 1, 2], [3, 4, 5]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"[[0, 1, 2],\n",
|
||||
" [3, 4, 5]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"三维数组三个轴:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:39:49.201611Z",
|
||||
"start_time": "2020-09-04T05:39:49.196659Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"[[[ 0, 1, 2],\n",
|
||||
" [ 3, 4, 5]],\n",
|
||||
"\n",
|
||||
" [[ 6, 7, 8],\n",
|
||||
" [ 9, 10, 11]]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"以此类推n维数组。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**以下表达式运行的结果分别是什么?**\n",
|
||||
"\n",
|
||||
"(提示: NaN = not a number, inf = infinity)\n",
|
||||
"\n",
|
||||
"0 * np.nan\n",
|
||||
"\n",
|
||||
"np.nan == np.nan\n",
|
||||
"\n",
|
||||
"np.inf > np.nan\n",
|
||||
"\n",
|
||||
"np.nan - np.nan\n",
|
||||
"\n",
|
||||
"0.3 == 3 * 0.1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:29:21.779136Z",
|
||||
"start_time": "2020-09-06T02:29:21.774149Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"nan\n",
|
||||
"False\n",
|
||||
"False\n",
|
||||
"nan\n",
|
||||
"False\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(0 * np.nan)\n",
|
||||
"print(np.nan == np.nan)\n",
|
||||
"print(np.inf > np.nan)\n",
|
||||
"print(np.nan - np.nan)\n",
|
||||
"print(0.3 == 3 * 0.1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**将numpy的datetime64对象转换为datetime的datetime对象。**\n",
|
||||
"\n",
|
||||
"- `dt64 = np.datetime64('2020-02-25 22:10:10')`\n",
|
||||
"\n",
|
||||
"【知识点:时间日期和时间增量】\n",
|
||||
"- 如何将numpy的datetime64对象转换为datetime的datetime对象?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:22:33.585786Z",
|
||||
"start_time": "2020-09-06T03:22:33.577808Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"2020-02-25 22:10:10 <class 'datetime.datetime'>\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import datetime\n",
|
||||
"\n",
|
||||
"dt64 = np.datetime64('2020-02-25 22:10:10')\n",
|
||||
"dt = dt64.astype(datetime.datetime)\n",
|
||||
"print(dt, type(dt))\n",
|
||||
"# 2020-02-25 22:10:10 <class 'datetime.datetime'>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:23:02.362883Z",
|
||||
"start_time": "2020-09-06T03:23:02.357896Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**给定一系列不连续的日期序列。填充缺失的日期,使其成为连续的日期序列。**\n",
|
||||
"\n",
|
||||
"- `dates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)`\n",
|
||||
"\n",
|
||||
"【知识点:时间日期和时间增量、数学函数】\n",
|
||||
"- 如何填写不规则系列的numpy日期中的缺失日期?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:23:17.318967Z",
|
||||
"start_time": "2020-09-06T03:23:17.307994Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"['2020-02-01' '2020-02-03' '2020-02-05' '2020-02-07' '2020-02-09']\n",
|
||||
"['2020-02-01' '2020-02-02' '2020-02-03' '2020-02-04' '2020-02-05'\n",
|
||||
" '2020-02-06' '2020-02-07' '2020-02-08' '2020-02-09']\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"dates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)\n",
|
||||
"print(dates)\n",
|
||||
"# ['2020-02-01' '2020-02-03' '2020-02-05' '2020-02-07' '2020-02-09']\n",
|
||||
"\n",
|
||||
"out = []\n",
|
||||
"for date, d in zip(dates, np.diff(dates)):\n",
|
||||
" out.extend(np.arange(date, date + d))\n",
|
||||
"fillin = np.array(out)\n",
|
||||
"output = np.hstack([fillin, dates[-1]])\n",
|
||||
"print(output)\n",
|
||||
"# ['2020-02-01' '2020-02-02' '2020-02-03' '2020-02-04' '2020-02-05'\n",
|
||||
"# '2020-02-06' '2020-02-07' '2020-02-08' '2020-02-09']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**如何得到昨天,今天,明天的的日期**\n",
|
||||
"\n",
|
||||
"【知识点:时间日期】\n",
|
||||
"- (提示: np.datetime64, np.timedelta64)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:21:51.819371Z",
|
||||
"start_time": "2020-09-14T09:21:51.815870Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')\n",
|
||||
"today = np.datetime64('today', 'D')\n",
|
||||
"tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:21:53.263787Z",
|
||||
"start_time": "2020-09-14T09:21:53.258801Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Yesterday is 2020-09-13\n",
|
||||
"Today is 2020-09-14\n",
|
||||
"Tomorrow is 2020-09-15\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print (\"Yesterday is \" + str(yesterday))\n",
|
||||
"print (\"Today is \" + str(today))\n",
|
||||
"print (\"Tomorrow is \"+ str(tomorrow))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"**创建从0到9的一维数字数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"- 如何创建一维数组?\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:21:17.599471Z",
|
||||
"start_time": "2020-09-04T05:21:17.595447Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0 1 2 3 4 5 6 7 8 9]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"#【答案】\n",
|
||||
"\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(10)\n",
|
||||
"print(arr)\n",
|
||||
"# [0 1 2 3 4 5 6 7 8 9]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**创建一个元素全为`True`的 3×3 数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"- 如何创建一个布尔数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:23:28.582218Z",
|
||||
"start_time": "2020-09-04T05:23:28.578229Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[ True True True]\n",
|
||||
" [ True True True]\n",
|
||||
" [ True True True]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"#答案\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.full([3, 3], True, dtype=np.bool)\n",
|
||||
"print(arr)\n",
|
||||
"# [[ True True True]\n",
|
||||
"# [ True True True]\n",
|
||||
"# [ True True True]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**创建一个长度为10并且除了第五个值为1的空向量**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"\n",
|
||||
"- (提示: array[4])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:57:59.004744Z",
|
||||
"start_time": "2020-09-04T05:57:58.999757Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.zeros(10)\n",
|
||||
"Z[4] = 1\n",
|
||||
"print(Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:58:20.995843Z",
|
||||
"start_time": "2020-09-04T05:58:20.990855Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**创建一个值域范围从10到49的向量**\n",
|
||||
"\n",
|
||||
"【知识点:创建数组】\n",
|
||||
"\n",
|
||||
"- (提示: np.arange)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-04T05:58:45.316583Z",
|
||||
"start_time": "2020-09-04T05:58:45.312592Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33\n",
|
||||
" 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.arange(10,50)\n",
|
||||
"print(Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**创建一个 3x3x3的随机数组**\n",
|
||||
"\n",
|
||||
"【知识点:创建数组】\n",
|
||||
"\n",
|
||||
"(提示: np.random.random)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:25:01.890974Z",
|
||||
"start_time": "2020-09-06T02:25:01.555976Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[[0.9656547 0.98794518 0.97311304]\n",
|
||||
" [0.70795913 0.48301228 0.99415693]\n",
|
||||
" [0.88059252 0.36213986 0.09431051]]\n",
|
||||
"\n",
|
||||
" [[0.19983998 0.27391144 0.75292906]\n",
|
||||
" [0.19717369 0.97399681 0.84519249]\n",
|
||||
" [0.1990827 0.75098517 0.49597504]]\n",
|
||||
"\n",
|
||||
" [[0.59227295 0.13609747 0.278576 ]\n",
|
||||
" [0.0652865 0.30666851 0.44145043]\n",
|
||||
" [0.28980157 0.64063686 0.13204375]]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.random.random((3,3,3))\n",
|
||||
"print(Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**创建一个二维数组,其中边界值为1,其余值为0**\n",
|
||||
"\n",
|
||||
"【知识点:二维数组的创建】\n",
|
||||
"\n",
|
||||
"- (提示: array[1:-1, 1:-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:26:25.019587Z",
|
||||
"start_time": "2020-09-06T02:26:25.015563Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n",
|
||||
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.ones((10,10))\n",
|
||||
"Z[1:-1,1:-1] = 0\n",
|
||||
"print(Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:24:54.695345Z",
|
||||
"start_time": "2020-09-06T03:24:54.691389Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**创建长度为10的numpy数组,从5开始,在连续的数字之间的步长为3。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建与属性】\n",
|
||||
"- 如何在给定起始点、长度和步骤的情况下创建一个numpy数组序列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:25:11.711285Z",
|
||||
"start_time": "2020-09-06T03:25:11.708316Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 5 8 11 14 17 20 23 26 29 32]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"start = 5\n",
|
||||
"step = 3\n",
|
||||
"length = 10\n",
|
||||
"a = np.arange(start, start + step * length, step)\n",
|
||||
"print(a) # [ 5 8 11 14 17 20 23 26 29 32]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:25:34.766852Z",
|
||||
"start_time": "2020-09-06T03:25:34.762862Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**将本地图像导入并将其转换为numpy数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建与属性】\n",
|
||||
"- 如何将图像转换为numpy数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:27:06.728838Z",
|
||||
"start_time": "2020-09-06T03:27:06.496621Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"(959, 959, 3) uint8\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"from PIL import Image\n",
|
||||
"\n",
|
||||
"img1 = Image.open('test.jpg')\n",
|
||||
"a = np.array(img1)\n",
|
||||
"\n",
|
||||
"print(a.shape, a.dtype)\n",
|
||||
"# (959, 959, 3) uint8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
240
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/练习-数组的创建.ipynb
Normal file
240
IntroductionToNumpy/numpy/task01-2天-数据类型及数组创建/练习-数组的创建.ipynb
Normal file
@@ -0,0 +1,240 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **什么是numpy?**\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **如何安装numpy?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **什么是n维数组对象?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **如何区分一维、二维、多维?**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **以下表达式运行的结果分别是什么?**\n",
|
||||
"\n",
|
||||
"(提示: NaN = not a number, inf = infinity)\n",
|
||||
"\n",
|
||||
"0 * np.nan\n",
|
||||
"\n",
|
||||
"np.nan == np.nan\n",
|
||||
"\n",
|
||||
"np.inf > np.nan\n",
|
||||
"\n",
|
||||
"np.nan - np.nan\n",
|
||||
"\n",
|
||||
"0.3 == 3 * 0.1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将numpy的datetime64对象转换为datetime的datetime对象。**\n",
|
||||
"\n",
|
||||
"- `dt64 = np.datetime64('2020-02-25 22:10:10')`\n",
|
||||
"\n",
|
||||
"【知识点:时间日期和时间增量】\n",
|
||||
"- 如何将numpy的datetime64对象转换为datetime的datetime对象?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **给定一系列不连续的日期序列。填充缺失的日期,使其成为连续的日期序列。**\n",
|
||||
"\n",
|
||||
"- `dates = np.arange('2020-02-01', '2020-02-10', 2, np.datetime64)`\n",
|
||||
"\n",
|
||||
"【知识点:时间日期和时间增量、数学函数】\n",
|
||||
"- 如何填写不规则系列的numpy日期中的缺失日期?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **如何得到昨天,今天,明天的的日期**\n",
|
||||
"\n",
|
||||
"【知识点:时间日期】\n",
|
||||
"- (提示: np.datetime64, np.timedelta64)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n",
|
||||
"### **创建从0到9的一维数字数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"- 如何创建一维数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建一个元素全为`True`的 3×3 数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"- 如何创建一个布尔数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建一个长度为10并且除了第五个值为1的空向量**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建】\n",
|
||||
"\n",
|
||||
"- (提示: array[4])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建一个值域范围从10到49的向量**\n",
|
||||
"\n",
|
||||
"【知识点:创建数组】\n",
|
||||
"\n",
|
||||
"- (提示: np.arange)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建一个 3x3x3的随机数组**\n",
|
||||
"\n",
|
||||
"【知识点:创建数组】\n",
|
||||
"\n",
|
||||
"(提示: np.random.random)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建一个二维数组,其中边界值为1,其余值为0**\n",
|
||||
"\n",
|
||||
"【知识点:二维数组的创建】\n",
|
||||
"\n",
|
||||
"- (提示: array[1:-1, 1:-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **创建长度为10的numpy数组,从5开始,在连续的数字之间的步长为3。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建与属性】\n",
|
||||
"- 如何在给定起始点、长度和步骤的情况下创建一个numpy数组序列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将本地图像导入并将其转换为numpy数组。**\n",
|
||||
"\n",
|
||||
"【知识点:数组的创建与属性】\n",
|
||||
"- 如何将图像转换为numpy数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
596
IntroductionToNumpy/numpy/task02-2天索引/05. 索引、切片与迭代.ipynb
Normal file
596
IntroductionToNumpy/numpy/task02-2天索引/05. 索引、切片与迭代.ipynb
Normal file
@@ -0,0 +1,596 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 副本与视图\n",
|
||||
"在 Numpy 中,尤其是在做数组运算或数组操作时,返回结果不是数组的 **副本** 就是 **视图**。\n",
|
||||
"\n",
|
||||
"在 Numpy 中,所有赋值运算不会为数组和数组中的任何元素创建副本。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.copy()` 函数创建一个副本。 对副本数据进行修改,不会影响到原始数据,它们物理内存不在同一位置。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = x\n",
|
||||
"y[0] = -1\n",
|
||||
"print(x)\n",
|
||||
"# [-1 2 3 4 5 6 7 8]\n",
|
||||
"print(y)\n",
|
||||
"# [-1 2 3 4 5 6 7 8]\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = x.copy()\n",
|
||||
"y[0] = -1\n",
|
||||
"print(x)\n",
|
||||
"# [1 2 3 4 5 6 7 8]\n",
|
||||
"print(y)\n",
|
||||
"# [-1 2 3 4 5 6 7 8]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】数组切片操作返回的对象只是原数组的视图。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x\n",
|
||||
"y[::2, :3:2] = -1\n",
|
||||
"print(x)\n",
|
||||
"# [[-1 12 -1 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [-1 22 -1 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [-1 32 -1 34 35]]\n",
|
||||
"print(y)\n",
|
||||
"# [[-1 12 -1 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [-1 22 -1 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [-1 32 -1 34 35]]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x.copy()\n",
|
||||
"y[::2, :3:2] = -1\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"print(y)\n",
|
||||
"# [[-1 12 -1 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [-1 22 -1 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [-1 32 -1 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# 索引与切片\n",
|
||||
"\n",
|
||||
"数组索引机制指的是用方括号([])加序号的形式引用单个数组元素,它的用处很多,比如抽取元素,选取数组的几个元素,甚至为其赋一个新值。\n",
|
||||
"\n",
|
||||
"## 整数索引\n",
|
||||
"\n",
|
||||
"【例】要获取数组的单个元素,指定元素的索引即可。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"print(x[2]) # 3\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"print(x[2]) # [21 22 23 24 25]\n",
|
||||
"print(x[2][1]) # 22\n",
|
||||
"print(x[2, 1]) # 22\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## 切片索引\n",
|
||||
"\n",
|
||||
"切片操作是指抽取数组的一部分元素生成新数组。对 python **列表**进行切片操作得到的数组是原数组的**副本**,而对 **Numpy** 数据进行切片操作得到的数组则是指向相同缓冲区的**视图**。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"如果想抽取(或查看)数组的一部分,必须使用切片语法,也就是,把几个用冒号( `start:stop:step` )隔开的数字置于方括号内。\n",
|
||||
"\n",
|
||||
"为了更好地理解切片语法,还应该了解不明确指明起始和结束位置的情况。如省去第一个数字,numpy 会认为第一个数字是0;如省去第二个数字,numpy 则会认为第二个数字是数组的最大索引值;如省去最后一个数字,它将会被理解为1,也就是抽取所有元素而不再考虑间隔。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】对一维数组的切片\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"print(x[0:2]) # [1 2]\n",
|
||||
"print(x[1:5:2]) # [2 4]\n",
|
||||
"print(x[2:]) # [3 4 5 6 7 8]\n",
|
||||
"print(x[:2]) # [1 2]\n",
|
||||
"print(x[-2:]) # [7 8]\n",
|
||||
"print(x[:-2]) # [1 2 3 4 5 6]\n",
|
||||
"print(x[:]) # [1 2 3 4 5 6 7 8]\n",
|
||||
"print(x[::-1]) # [8 7 6 5 4 3 2 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】对二维数组切片\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"print(x[0:2])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]]\n",
|
||||
"\n",
|
||||
"print(x[1:5:2])\n",
|
||||
"# [[16 17 18 19 20]\n",
|
||||
"# [26 27 28 29 30]]\n",
|
||||
"\n",
|
||||
"print(x[2:])\n",
|
||||
"# [[21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"print(x[:2])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]]\n",
|
||||
"\n",
|
||||
"print(x[-2:])\n",
|
||||
"# [[26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"print(x[:-2])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]]\n",
|
||||
"\n",
|
||||
"print(x[:])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"print(x[2, :]) # [21 22 23 24 25]\n",
|
||||
"print(x[:, 2]) # [13 18 23 28 33]\n",
|
||||
"print(x[0, 1:4]) # [12 13 14]\n",
|
||||
"print(x[1:4, 0]) # [16 21 26]\n",
|
||||
"print(x[1:3, 2:4])\n",
|
||||
"# [[18 19]\n",
|
||||
"# [23 24]]\n",
|
||||
"\n",
|
||||
"print(x[:, :])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"print(x[::2, ::2])\n",
|
||||
"# [[11 13 15]\n",
|
||||
"# [21 23 25]\n",
|
||||
"# [31 33 35]]\n",
|
||||
"\n",
|
||||
"print(x[::-1, :])\n",
|
||||
"# [[31 32 33 34 35]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [11 12 13 14 15]]\n",
|
||||
"\n",
|
||||
"print(x[:, ::-1])\n",
|
||||
"# [[15 14 13 12 11]\n",
|
||||
"# [20 19 18 17 16]\n",
|
||||
"# [25 24 23 22 21]\n",
|
||||
"# [30 29 28 27 26]\n",
|
||||
"# [35 34 33 32 31]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"通过对每个以逗号分隔的维度执行单独的切片,你可以对多维数组进行切片。因此,对于二维数组,我们的第一片定义了行的切片,第二片定义了列的切片。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"x[0::2, 1::3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 0 13 14 0]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 0 23 24 0]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 0 33 34 0]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## dots 索引\n",
|
||||
"\n",
|
||||
"NumPy 允许使用`...`表示足够多的冒号来构建完整的索引列表。\n",
|
||||
"\n",
|
||||
"比如,如果 `x` 是 5 维数组:\n",
|
||||
"\n",
|
||||
"- `x[1,2,...]` 等于 `x[1,2,:,:,:]`\n",
|
||||
"- `x[...,3]` 等于 `x[:,:,:,:,3]` \n",
|
||||
"- `x[4,...,5,:]` 等于 `x[4,:,:,5,:]`\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.randint(1, 100, [2, 2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[[ 5 64 75]\n",
|
||||
"# [57 27 31]]\n",
|
||||
"# \n",
|
||||
"# [[68 85 3]\n",
|
||||
"# [93 26 25]]]\n",
|
||||
"\n",
|
||||
"print(x[1, ...])\n",
|
||||
"# [[68 85 3]\n",
|
||||
"# [93 26 25]]\n",
|
||||
"\n",
|
||||
"print(x[..., 2])\n",
|
||||
"# [[75 31]\n",
|
||||
"# [ 3 25]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 整数数组索引\n",
|
||||
"\n",
|
||||
"【例】方括号内传入多个索引值,可以同时选择多个元素。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"print(x[r])\n",
|
||||
"# [1 2 3]\n",
|
||||
"\n",
|
||||
"r = [0, 1, -1]\n",
|
||||
"print(x[r])\n",
|
||||
"# [1 2 8]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"print(x[r])\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]]\n",
|
||||
"\n",
|
||||
"r = [0, 1, -1]\n",
|
||||
"print(x[r])\n",
|
||||
"\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"c = [2, 3, 4]\n",
|
||||
"y = x[r, c]\n",
|
||||
"print(y)\n",
|
||||
"# [13 19 25]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"r = np.array([[0, 1], [3, 4]])\n",
|
||||
"print(x[r])\n",
|
||||
"# [[1 2]\n",
|
||||
"# [4 5]]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"r = np.array([[0, 1], [3, 4]])\n",
|
||||
"print(x[r])\n",
|
||||
"# [[[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]]\n",
|
||||
"#\n",
|
||||
"# [[26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]]\n",
|
||||
"\n",
|
||||
"# 获取了 5X5 数组中的四个角的元素。\n",
|
||||
"# 行索引是 [0,0] 和 [4,4],而列索引是 [0,4] 和 [0,4]。\n",
|
||||
"r = np.array([[0, 0], [4, 4]])\n",
|
||||
"c = np.array([[0, 4], [0, 4]])\n",
|
||||
"y = x[r, c]\n",
|
||||
"print(y)\n",
|
||||
"# [[11 15]\n",
|
||||
"# [31 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】可以借助切片`:`与整数数组组合。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = x[0:3, [1, 2, 2]]\n",
|
||||
"print(y)\n",
|
||||
"# [[12 13 13]\n",
|
||||
"# [17 18 18]\n",
|
||||
"# [22 23 23]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy. take(a, indices, axis=None, out=None, mode='raise')` Take elements from an array along an axis.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"print(np.take(x, r))\n",
|
||||
"# [1 2 3]\n",
|
||||
"\n",
|
||||
"r = [0, 1, -1]\n",
|
||||
"print(np.take(x, r))\n",
|
||||
"# [1 2 8]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"print(np.take(x, r, axis=0))\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]]\n",
|
||||
"\n",
|
||||
"r = [0, 1, -1]\n",
|
||||
"print(np.take(x, r, axis=0))\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"r = [0, 1, 2]\n",
|
||||
"c = [2, 3, 4]\n",
|
||||
"y = np.take(x, [r, c])\n",
|
||||
"print(y)\n",
|
||||
"# [[11 12 13]\n",
|
||||
"# [13 14 15]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 布尔索引\n",
|
||||
"\n",
|
||||
"我们可以通过一个布尔数组来索引目标数组。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = x > 5\n",
|
||||
"print(y)\n",
|
||||
"# [False False False False False True True True]\n",
|
||||
"print(x[x > 5])\n",
|
||||
"# [6 7 8]\n",
|
||||
"\n",
|
||||
"x = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])\n",
|
||||
"y = np.logical_not(np.isnan(x))\n",
|
||||
"print(x[y])\n",
|
||||
"# [1. 2. 3. 4. 5.]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x > 25\n",
|
||||
"print(y)\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"print(x[x > 25])\n",
|
||||
"# [26 27 28 29 30 31 32 33 34 35]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"x = np.linspace(0, 2 * np.pi, 50)\n",
|
||||
"y = np.sin(x)\n",
|
||||
"print(len(x)) # 50\n",
|
||||
"plt.plot(x, y)\n",
|
||||
"\n",
|
||||
"mask = y >= 0\n",
|
||||
"print(len(x[mask])) # 25\n",
|
||||
"print(mask)\n",
|
||||
"'''\n",
|
||||
"[ True True True True True True True True True True True True\n",
|
||||
" True True True True True True True True True True True True\n",
|
||||
" True False False False False False False False False False False False\n",
|
||||
" False False False False False False False False False False False False\n",
|
||||
" False False]\n",
|
||||
"'''\n",
|
||||
"plt.plot(x[mask], y[mask], 'bo')\n",
|
||||
"\n",
|
||||
"mask = np.logical_and(y >= 0, x <= np.pi / 2)\n",
|
||||
"print(mask)\n",
|
||||
"'''\n",
|
||||
"[ True True True True True True True True True True True True\n",
|
||||
" True False False False False False False False False False False False\n",
|
||||
" False False False False False False False False False False False False\n",
|
||||
" False False False False False False False False False False False False\n",
|
||||
" False False]\n",
|
||||
"'''\n",
|
||||
"\n",
|
||||
"plt.plot(x[mask], y[mask], 'go')\n",
|
||||
"plt.show()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"我们利用这些条件来选择图上的不同点。蓝色点(在图中还包括绿点,但绿点掩盖了蓝色点),显示值 大于0 的所有点。绿色点表示值 大于0 且 小于0.5π 的所有点。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数组迭代\n",
|
||||
"\n",
|
||||
"除了for循环,Numpy 还提供另外一种更为优雅的遍历方法。\n",
|
||||
"\n",
|
||||
"- `apply_along_axis(func1d, axis, arr)` Apply a function to 1-D slices along the given axis.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.apply_along_axis(np.sum, 0, x)\n",
|
||||
"print(y) # [105 110 115 120 125]\n",
|
||||
"y = np.apply_along_axis(np.sum, 1, x)\n",
|
||||
"print(y) # [ 65 90 115 140 165]\n",
|
||||
"\n",
|
||||
"y = np.apply_along_axis(np.mean, 0, x)\n",
|
||||
"print(y) # [21. 22. 23. 24. 25.]\n",
|
||||
"y = np.apply_along_axis(np.mean, 1, x)\n",
|
||||
"print(y) # [13. 18. 23. 28. 33.]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def my_func(x):\n",
|
||||
" return (x[0] + x[-1]) * 0.5\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = np.apply_along_axis(my_func, 0, x)\n",
|
||||
"print(y) # [21. 22. 23. 24. 25.]\n",
|
||||
"y = np.apply_along_axis(my_func, 1, x)\n",
|
||||
"print(y) # [13. 18. 23. 28. 33.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
291
IntroductionToNumpy/numpy/task02-2天索引/练习--索引,切片迭代-答案.ipynb
Normal file
291
IntroductionToNumpy/numpy/task02-2天索引/练习--索引,切片迭代-答案.ipynb
Normal file
@@ -0,0 +1,291 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**交换数组arr中的列1和列2。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何交换二维数组中的两列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:56:51.266868Z",
|
||||
"start_time": "2020-09-06T02:56:51.260884Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2]\n",
|
||||
" [3 4 5]\n",
|
||||
" [6 7 8]]\n",
|
||||
"[[2 1 0]\n",
|
||||
" [5 4 3]\n",
|
||||
" [8 7 6]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(9).reshape(3, 3)\n",
|
||||
"print(arr)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"\n",
|
||||
"x = arr[:, [2, 1, 0]]\n",
|
||||
"print(x)\n",
|
||||
"# [[2 1 0]\n",
|
||||
"# [5 4 3]\n",
|
||||
"# [8 7 6]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:57:26.869431Z",
|
||||
"start_time": "2020-09-06T02:57:26.864408Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**交换数组arr中的第1行和第2行。**\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何交换二维数组中的两行?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:57:43.336029Z",
|
||||
"start_time": "2020-09-06T02:57:43.331042Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2]\n",
|
||||
" [3 4 5]\n",
|
||||
" [6 7 8]]\n",
|
||||
"[[3 4 5]\n",
|
||||
" [0 1 2]\n",
|
||||
" [6 7 8]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(9).reshape(3, 3)\n",
|
||||
"print(arr)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"\n",
|
||||
"x = arr[[1, 0, 2], :]\n",
|
||||
"print(x)\n",
|
||||
"# [[3 4 5]\n",
|
||||
"# [0 1 2]\n",
|
||||
"# [6 7 8]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:58:04.059418Z",
|
||||
"start_time": "2020-09-06T02:58:04.054430Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**反转二维数组arr的行。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何反转二维数组的行?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:58:21.071694Z",
|
||||
"start_time": "2020-09-06T02:58:21.067682Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2]\n",
|
||||
" [3 4 5]\n",
|
||||
" [6 7 8]]\n",
|
||||
"[[6 7 8]\n",
|
||||
" [3 4 5]\n",
|
||||
" [0 1 2]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(9).reshape(3, 3)\n",
|
||||
"print(arr)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"\n",
|
||||
"x = arr[::-1, :]\n",
|
||||
"print(x)\n",
|
||||
"# [[6 7 8]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [0 1 2]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:58:39.880250Z",
|
||||
"start_time": "2020-09-06T02:58:39.875230Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**反转二维数组arr的列。**\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何反转二维数组的列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:58:54.851622Z",
|
||||
"start_time": "2020-09-06T02:58:54.846601Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2]\n",
|
||||
" [3 4 5]\n",
|
||||
" [6 7 8]]\n",
|
||||
"[[2 1 0]\n",
|
||||
" [5 4 3]\n",
|
||||
" [8 7 6]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(9).reshape(3, 3)\n",
|
||||
"print(arr)\n",
|
||||
"# [[0 1 2]\n",
|
||||
"# [3 4 5]\n",
|
||||
"# [6 7 8]]\n",
|
||||
"\n",
|
||||
"x = arr[:, ::-1]\n",
|
||||
"print(x)\n",
|
||||
"# [[2 1 0]\n",
|
||||
"# [5 4 3]\n",
|
||||
"# [8 7 6]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
120
IntroductionToNumpy/numpy/task02-2天索引/练习--索引,切片迭代.ipynb
Normal file
120
IntroductionToNumpy/numpy/task02-2天索引/练习--索引,切片迭代.ipynb
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **交换数组arr中的列1和列2。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何交换二维数组中的两列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **交换数组arr中的第1行和第2行。**\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何交换二维数组中的两行?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **反转二维数组arr的行。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何反转二维数组的行?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **反转二维数组arr的列。**\n",
|
||||
"- `arr = np.arange(9).reshape(3, 3)`\n",
|
||||
"\n",
|
||||
"【知识点:索引与切片】\n",
|
||||
"- 如何反转二维数组的列?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,940 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 数组操作\n",
|
||||
"\n",
|
||||
"## 更改形状\n",
|
||||
"\n",
|
||||
"在对数组进行操作时,为了满足格式和计算的要求通常会改变其形状。\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.shape`表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 `ndim` 属性(秩)。\n",
|
||||
"\n",
|
||||
"【例】通过修改 shap 属性来改变数组的形状。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 9, 4, 5, 6, 7, 8])\n",
|
||||
"print(x.shape) # (8,)\n",
|
||||
"x.shape = [2, 4]\n",
|
||||
"print(x)\n",
|
||||
"# [[1 2 9 4]\n",
|
||||
"# [5 6 7 8]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.flat` 将数组转换为一维的迭代器,可以用for访问数组每一个元素。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x.flat\n",
|
||||
"print(y)\n",
|
||||
"# <numpy.flatiter object at 0x0000020F9BA10C60>\n",
|
||||
"for i in y:\n",
|
||||
" print(i, end=' ')\n",
|
||||
"# 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(end='\\n')\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 0 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.flatten([order='C'])` 将数组的副本转换为一维数组,并返回。\n",
|
||||
" - order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。(简记)\n",
|
||||
" - order:{'C / F,'A,K},可选使用此索引顺序读取a的元素。'C'意味着以行大的C风格顺序对元素进行索引,最后一个轴索引会更改F表示以列大的Fortran样式顺序索引元素,其中第一个索引变化最快,最后一个索引变化最快。请注意,'C'和'F'选项不考虑基础数组的内存布局,仅引用轴索引的顺序.A'表示如果a为Fortran,则以类似Fortran的索引顺序读取元素在内存中连续,否则类似C的顺序。“ K”表示按照步序在内存中的顺序读取元素,但步幅为负时反转数据除外。默认情况下,使用Cindex顺序。\n",
|
||||
"\n",
|
||||
"【例】`flatten()`函数返回的是拷贝。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x.flatten()\n",
|
||||
"print(y)\n",
|
||||
"# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = x.flatten(order='F')\n",
|
||||
"print(y)\n",
|
||||
"# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.ravel(a, order='C')`Return a contiguous flattened array.\n",
|
||||
"\n",
|
||||
"【例】`ravel()`返回的是视图。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.ravel(x)\n",
|
||||
"print(y)\n",
|
||||
"# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 0 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"【例】order=F 就是拷贝\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.ravel(x, order='F')\n",
|
||||
"print(y)\n",
|
||||
"# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.reshape(a, newshape[, order='C'])`在不更改数据的情况下为数组赋予新的形状。\n",
|
||||
"\n",
|
||||
"【例】`reshape()`函数当参数`newshape = [rows,-1]`时,将根据行数自动确定列数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(12)\n",
|
||||
"y = np.reshape(x, [3, 4])\n",
|
||||
"print(y.dtype) # int32\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [ 4 5 6 7]\n",
|
||||
"# [ 8 9 10 11]]\n",
|
||||
"\n",
|
||||
"y = np.reshape(x, [3, -1])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [ 4 5 6 7]\n",
|
||||
"# [ 8 9 10 11]]\n",
|
||||
"\n",
|
||||
"y = np.reshape(x,[-1,3])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2]\n",
|
||||
"# [ 3 4 5]\n",
|
||||
"# [ 6 7 8]\n",
|
||||
"# [ 9 10 11]]\n",
|
||||
"\n",
|
||||
"y[0, 1] = 10\n",
|
||||
"print(x)\n",
|
||||
"# [ 0 10 2 3 4 5 6 7 8 9 10 11](改变x去reshape后y中的值,x对应元素也改变)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`reshape()`函数当参数`newshape = -1`时,表示将数组降为一维。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.randint(12, size=[2, 2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[[11 9 1]\n",
|
||||
"# [ 1 10 3]]\n",
|
||||
"# \n",
|
||||
"# [[ 0 6 1]\n",
|
||||
"# [ 4 11 3]]]\n",
|
||||
"y = np.reshape(x, -1)\n",
|
||||
"print(y)\n",
|
||||
"# [11 9 1 1 10 3 0 6 1 4 11 3]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组转置\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.transpose(a, axes=None)` Permute the dimensions of an array.\n",
|
||||
"- `numpy.ndarray.T` Same as `self.transpose()`, except that self is returned if `self.ndim < 2`.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[6.74 8.46 6.74 5.45 1.25]\n",
|
||||
"# [3.54 3.49 8.62 1.94 9.92]\n",
|
||||
"# [5.03 7.22 1.6 8.7 0.43]\n",
|
||||
"# [7.5 7.31 5.69 9.67 7.65]\n",
|
||||
"# [1.8 9.52 2.78 5.87 4.14]]\n",
|
||||
"y = x.T\n",
|
||||
"print(y)\n",
|
||||
"# [[6.74 3.54 5.03 7.5 1.8 ]\n",
|
||||
"# [8.46 3.49 7.22 7.31 9.52]\n",
|
||||
"# [6.74 8.62 1.6 5.69 2.78]\n",
|
||||
"# [5.45 1.94 8.7 9.67 5.87]\n",
|
||||
"# [1.25 9.92 0.43 7.65 4.14]]\n",
|
||||
"y = np.transpose(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[6.74 3.54 5.03 7.5 1.8 ]\n",
|
||||
"# [8.46 3.49 7.22 7.31 9.52]\n",
|
||||
"# [6.74 8.62 1.6 5.69 2.78]\n",
|
||||
"# [5.45 1.94 8.7 9.67 5.87]\n",
|
||||
"# [1.25 9.92 0.43 7.65 4.14]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 更改维度\n",
|
||||
"\n",
|
||||
"当创建一个数组之后,还可以给它增加一个维度,这在矩阵计算中经常会用到。\n",
|
||||
"\n",
|
||||
"- `numpy.newaxis = None` `None`的别名,对索引数组很有用。\n",
|
||||
"\n",
|
||||
"【例】很多工具包在进行计算时都会先判断输入数据的维度是否满足要求,如果输入数据达不到指定的维度时,可以使用`newaxis`参数来增加一个维度。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 9, 4, 5, 6, 7, 8])\n",
|
||||
"print(x.shape) # (8,)\n",
|
||||
"print(x) # [1 2 9 4 5 6 7 8]\n",
|
||||
"\n",
|
||||
"y = x[np.newaxis, :]\n",
|
||||
"print(y.shape) # (1, 8)\n",
|
||||
"print(y) # [[1 2 9 4 5 6 7 8]]\n",
|
||||
"\n",
|
||||
"y = x[:, np.newaxis]\n",
|
||||
"print(y.shape) # (8, 1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1]\n",
|
||||
"# [2]\n",
|
||||
"# [9]\n",
|
||||
"# [4]\n",
|
||||
"# [5]\n",
|
||||
"# [6]\n",
|
||||
"# [7]\n",
|
||||
"# [8]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.squeeze(a, axis=None)` 从数组的形状中删除单维度条目,即把shape中为1的维度去掉。\n",
|
||||
" - `a`表示输入的数组;\n",
|
||||
" - `axis`用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;\n",
|
||||
"\n",
|
||||
"在机器学习和深度学习中,通常算法的结果是可以表示向量的数组(即包含两对或以上的方括号形式[[]]),如果直接利用这个数组进行画图可能显示界面为空(见后面的示例)。我们可以利用`squeeze()`函数将表示向量的数组转换为秩为1的数组,这样利用 matplotlib 库函数画图时,就可以正常的显示结果了。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(10)\n",
|
||||
"print(x.shape) # (10,)\n",
|
||||
"x = x[np.newaxis, :]\n",
|
||||
"print(x.shape) # (1, 10)\n",
|
||||
"y = np.squeeze(x)\n",
|
||||
"print(y.shape) # (10,)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[[0], [1], [2]]])\n",
|
||||
"print(x.shape) # (1, 3, 1)\n",
|
||||
"print(x)\n",
|
||||
"# [[[0]\n",
|
||||
"# [1]\n",
|
||||
"# [2]]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x)\n",
|
||||
"print(y.shape) # (3,)\n",
|
||||
"print(y) # [0 1 2]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=0)\n",
|
||||
"print(y.shape) # (3, 1)\n",
|
||||
"print(y)\n",
|
||||
"# [[0]\n",
|
||||
"# [1]\n",
|
||||
"# [2]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=2)\n",
|
||||
"print(y.shape) # (1, 3)\n",
|
||||
"print(y) # [[0 1 2]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=1)\n",
|
||||
"# ValueError: cannot select an axis to squeeze out which has size not equal to one\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 4, 9, 16, 25]])\n",
|
||||
"print(x.shape) # (1, 5)\n",
|
||||
"plt.plot(x)\n",
|
||||
"plt.show()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 4, 9, 16, 25]])\n",
|
||||
"x = np.squeeze(x)\n",
|
||||
"print(x.shape) # (5, )\n",
|
||||
"plt.plot(x)\n",
|
||||
"plt.show()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组组合\n",
|
||||
"\n",
|
||||
"如果要将两份数据组合到一起,就需要拼接操作。\n",
|
||||
"\n",
|
||||
"- `numpy.concatenate((a1, a2, ...), axis=0, out=None)` Join a sequence of arrays along an existing axis.\n",
|
||||
"\n",
|
||||
"【例】连接沿现有轴的数组序列(原来x,y都是一维的,拼接后的结果也是一维的)。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】原来x,y都是二维的,拼接后的结果也是二维的。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"z = np.concatenate([x, y], axis=1)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】x,y在原来的维度上进行拼接。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"z = np.concatenate([x, y], axis=1)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.stack(arrays, axis=0, out=None)`Join a sequence of arrays along a new axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】沿着新的轴加入一系列数组(stack为增加维度的拼接)。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 7]\n",
|
||||
"# [2 8]\n",
|
||||
"# [3 9]]\n",
|
||||
"```\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 1, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 2 3]]\n",
|
||||
"#\n",
|
||||
"# [[7 8 9]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (1, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 2 3]\n",
|
||||
"# [7 8 9]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=2)\n",
|
||||
"print(z.shape) # (1, 3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 7]\n",
|
||||
"# [2 8]\n",
|
||||
"# [3 9]]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 2 3]\n",
|
||||
"# [ 4 5 6]]\n",
|
||||
"# \n",
|
||||
"# [[ 7 8 9]\n",
|
||||
"# [10 11 12]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (2, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"# \n",
|
||||
"# [[ 4 5 6]\n",
|
||||
"# [10 11 12]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=2)\n",
|
||||
"print(z.shape) # (2, 3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 7]\n",
|
||||
"# [ 2 8]\n",
|
||||
"# [ 3 9]]\n",
|
||||
"# \n",
|
||||
"# [[ 4 10]\n",
|
||||
"# [ 5 11]\n",
|
||||
"# [ 6 12]]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.vstack(tup)`Stack arrays in sequence vertically (row wise).\n",
|
||||
"- `numpy.hstack(tup)`Stack arrays in sequence horizontally (column wise). \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】一维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (6,)\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y))\n",
|
||||
"print(z.shape) # (6,)\n",
|
||||
"print(z) # [1 2 3 7 8 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】二维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=0)\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (1, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=1)\n",
|
||||
"print(z.shape) # (1, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3 7 8 9]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】二维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (4, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=0)\n",
|
||||
"print(z.shape) # (4, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (2, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=1)\n",
|
||||
"print(z.shape) # (2, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"`hstack(),vstack()`分别表示水平和竖直的拼接方式。在数据维度等于1时,比较特殊。而当维度大于或等于2时,它们的作用相当于`concatenate`,用于在已有轴上进行操作。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.hstack([np.array([1, 2, 3, 4]), 5])\n",
|
||||
"print(a) # [1 2 3 4 5]\n",
|
||||
"\n",
|
||||
"a = np.concatenate([np.array([1, 2, 3, 4]), 5])\n",
|
||||
"print(a)\n",
|
||||
"# all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 0 dimension(s)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组拆分\n",
|
||||
"\n",
|
||||
"- `numpy.split(ary, indices_or_sections, axis=0)` Split an array into multiple sub-arrays as views into ary.\n",
|
||||
"\n",
|
||||
"【例】拆分数组。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.split(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.vsplit(ary, indices_or_sections)` Split an array into multiple sub-arrays vertically (row-wise).\n",
|
||||
"\n",
|
||||
"【例】垂直切分是把数组按照高度切分\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.vsplit(x, 3)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, 3)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = np.vsplit(x, [1])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = np.vsplit(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"y = np.split(x, [1, 3], axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.hsplit(ary, indices_or_sections)` Split an array into multiple sub-arrays horizontally (column-wise).\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】水平切分是把数组按照宽度切分。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.hsplit(x, 2)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12],\n",
|
||||
"# [16, 17],\n",
|
||||
"# [21, 22]]), array([[13, 14],\n",
|
||||
"# [18, 19],\n",
|
||||
"# [23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, 2, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12],\n",
|
||||
"# [16, 17],\n",
|
||||
"# [21, 22]]), array([[13, 14],\n",
|
||||
"# [18, 19],\n",
|
||||
"# [23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.hsplit(x, [3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13],\n",
|
||||
"# [16, 17, 18],\n",
|
||||
"# [21, 22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13],\n",
|
||||
"# [16, 17, 18],\n",
|
||||
"# [21, 22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.hsplit(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组平铺\n",
|
||||
"\n",
|
||||
"- `numpy.tile(A, reps)` Construct an array by repeating A the number of times given by reps.\n",
|
||||
"\n",
|
||||
"`tile`是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来。\n",
|
||||
"\n",
|
||||
"【例】将原矩阵横向、纵向地复制。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2], [3, 4]])\n",
|
||||
"print(x)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (1, 3))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (3, 1))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (3, 3))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]\n",
|
||||
"# [1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]\n",
|
||||
"# [1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.repeat(a, repeats, axis=None)` Repeat elements of an array.\n",
|
||||
" - `axis=0`,沿着y轴复制,实际上增加了行数。\n",
|
||||
" - `axis=1`,沿着x轴复制,实际上增加了列数。\n",
|
||||
" - `repeats`,可以为一个数,也可以为一个矩阵。\n",
|
||||
" - `axis=None`时就会flatten当前矩阵,实际上就是变成了一个行向量。\n",
|
||||
"\n",
|
||||
"【例】重复数组的元素。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.repeat(3, 4)\n",
|
||||
"print(x) # [3 3 3 3]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2], [3, 4]])\n",
|
||||
"y = np.repeat(x, 2)\n",
|
||||
"print(y)\n",
|
||||
"# [1 1 2 2 3 3 4 4]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, 2, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, 2, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 2 2]\n",
|
||||
"# [3 3 4 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, [2, 3], axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, [2, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 2 2 2]\n",
|
||||
"# [3 3 4 4 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 添加和删除元素\n",
|
||||
"\n",
|
||||
"- `numpy.unique(ar, return_index=False, return_inverse=False,return_counts=False, axis=None)` Find the unique elements of an array.\n",
|
||||
" - return_index:the indices of the input array that give the unique values\n",
|
||||
" - return_inverse:the indices of the unique array that reconstruct the input array\n",
|
||||
" - return_counts:the number of times each unique value comes up in the input array\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】查找数组的唯一元素。\n",
|
||||
"```python\n",
|
||||
"a=np.array([1,1,2,3,3,4,4])\n",
|
||||
"b=np.unique(a,return_counts=True)\n",
|
||||
"print(b[0][list(b[1]).index(1)])\n",
|
||||
"#2\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"- https://blog.csdn.net/csdn15698845876/article/details/73380803\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-08-30T13:01:49.899843Z",
|
||||
"start_time": "2020-08-30T13:01:49.895853Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"2\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"a=np.array([1,1,2,3,3,4,4])\n",
|
||||
"b=np.unique(a,return_counts=True)\n",
|
||||
"print(b[0][list(b[1]).index(1)])"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.193px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
940
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/06. 数组操作.ipynb
Normal file
940
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/06. 数组操作.ipynb
Normal file
@@ -0,0 +1,940 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 数组操作\n",
|
||||
"\n",
|
||||
"## 更改形状\n",
|
||||
"\n",
|
||||
"在对数组进行操作时,为了满足格式和计算的要求通常会改变其形状。\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.shape`表示数组的维度,返回一个元组,这个元组的长度就是维度的数目,即 `ndim` 属性(秩)。\n",
|
||||
"\n",
|
||||
"【例】通过修改 shap 属性来改变数组的形状。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 9, 4, 5, 6, 7, 8])\n",
|
||||
"print(x.shape) # (8,)\n",
|
||||
"x.shape = [2, 4]\n",
|
||||
"print(x)\n",
|
||||
"# [[1 2 9 4]\n",
|
||||
"# [5 6 7 8]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.flat` 将数组转换为一维的迭代器,可以用for访问数组每一个元素。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x.flat\n",
|
||||
"print(y)\n",
|
||||
"# <numpy.flatiter object at 0x0000020F9BA10C60>\n",
|
||||
"for i in y:\n",
|
||||
" print(i, end=' ')\n",
|
||||
"# 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(end='\\n')\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 0 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.ndarray.flatten([order='C'])` 将数组的副本转换为一维数组,并返回。\n",
|
||||
" - order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。(简记)\n",
|
||||
" - order:{'C / F,'A,K},可选使用此索引顺序读取a的元素。'C'意味着以行大的C风格顺序对元素进行索引,最后一个轴索引会更改F表示以列大的Fortran样式顺序索引元素,其中第一个索引变化最快,最后一个索引变化最快。请注意,'C'和'F'选项不考虑基础数组的内存布局,仅引用轴索引的顺序.A'表示如果a为Fortran,则以类似Fortran的索引顺序读取元素在内存中连续,否则类似C的顺序。“ K”表示按照步序在内存中的顺序读取元素,但步幅为负时反转数据除外。默认情况下,使用Cindex顺序。\n",
|
||||
"\n",
|
||||
"【例】`flatten()`函数返回的是拷贝。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x.flatten()\n",
|
||||
"print(y)\n",
|
||||
"# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = x.flatten(order='F')\n",
|
||||
"print(y)\n",
|
||||
"# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.ravel(a, order='C')`Return a contiguous flattened array.\n",
|
||||
"\n",
|
||||
"【例】`ravel()`返回的是视图。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.ravel(x)\n",
|
||||
"print(y)\n",
|
||||
"# [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 0 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"\n",
|
||||
"【例】order=F 就是拷贝\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.ravel(x, order='F')\n",
|
||||
"print(y)\n",
|
||||
"# [11 16 21 26 31 12 17 22 27 32 13 18 23 28 33 14 19 24 29 34 15 20 25 30\n",
|
||||
"# 35]\n",
|
||||
"\n",
|
||||
"y[3] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [[11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [31 32 33 34 35]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.reshape(a, newshape[, order='C'])`在不更改数据的情况下为数组赋予新的形状。\n",
|
||||
"\n",
|
||||
"【例】`reshape()`函数当参数`newshape = [rows,-1]`时,将根据行数自动确定列数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(12)\n",
|
||||
"y = np.reshape(x, [3, 4])\n",
|
||||
"print(y.dtype) # int32\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [ 4 5 6 7]\n",
|
||||
"# [ 8 9 10 11]]\n",
|
||||
"\n",
|
||||
"y = np.reshape(x, [3, -1])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2 3]\n",
|
||||
"# [ 4 5 6 7]\n",
|
||||
"# [ 8 9 10 11]]\n",
|
||||
"\n",
|
||||
"y = np.reshape(x,[-1,3])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2]\n",
|
||||
"# [ 3 4 5]\n",
|
||||
"# [ 6 7 8]\n",
|
||||
"# [ 9 10 11]]\n",
|
||||
"\n",
|
||||
"y[0, 1] = 10\n",
|
||||
"print(x)\n",
|
||||
"# [ 0 10 2 3 4 5 6 7 8 9 10 11](改变x去reshape后y中的值,x对应元素也改变)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`reshape()`函数当参数`newshape = -1`时,表示将数组降为一维。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.randint(12, size=[2, 2, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[[11 9 1]\n",
|
||||
"# [ 1 10 3]]\n",
|
||||
"# \n",
|
||||
"# [[ 0 6 1]\n",
|
||||
"# [ 4 11 3]]]\n",
|
||||
"y = np.reshape(x, -1)\n",
|
||||
"print(y)\n",
|
||||
"# [11 9 1 1 10 3 0 6 1 4 11 3]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组转置\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.transpose(a, axes=None)` Permute the dimensions of an array.\n",
|
||||
"- `numpy.ndarray.T` Same as `self.transpose()`, except that self is returned if `self.ndim < 2`.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[6.74 8.46 6.74 5.45 1.25]\n",
|
||||
"# [3.54 3.49 8.62 1.94 9.92]\n",
|
||||
"# [5.03 7.22 1.6 8.7 0.43]\n",
|
||||
"# [7.5 7.31 5.69 9.67 7.65]\n",
|
||||
"# [1.8 9.52 2.78 5.87 4.14]]\n",
|
||||
"y = x.T\n",
|
||||
"print(y)\n",
|
||||
"# [[6.74 3.54 5.03 7.5 1.8 ]\n",
|
||||
"# [8.46 3.49 7.22 7.31 9.52]\n",
|
||||
"# [6.74 8.62 1.6 5.69 2.78]\n",
|
||||
"# [5.45 1.94 8.7 9.67 5.87]\n",
|
||||
"# [1.25 9.92 0.43 7.65 4.14]]\n",
|
||||
"y = np.transpose(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[6.74 3.54 5.03 7.5 1.8 ]\n",
|
||||
"# [8.46 3.49 7.22 7.31 9.52]\n",
|
||||
"# [6.74 8.62 1.6 5.69 2.78]\n",
|
||||
"# [5.45 1.94 8.7 9.67 5.87]\n",
|
||||
"# [1.25 9.92 0.43 7.65 4.14]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 更改维度\n",
|
||||
"\n",
|
||||
"当创建一个数组之后,还可以给它增加一个维度,这在矩阵计算中经常会用到。\n",
|
||||
"\n",
|
||||
"- `numpy.newaxis = None` `None`的别名,对索引数组很有用。\n",
|
||||
"\n",
|
||||
"【例】很多工具包在进行计算时都会先判断输入数据的维度是否满足要求,如果输入数据达不到指定的维度时,可以使用`newaxis`参数来增加一个维度。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 9, 4, 5, 6, 7, 8])\n",
|
||||
"print(x.shape) # (8,)\n",
|
||||
"print(x) # [1 2 9 4 5 6 7 8]\n",
|
||||
"\n",
|
||||
"y = x[np.newaxis, :]\n",
|
||||
"print(y.shape) # (1, 8)\n",
|
||||
"print(y) # [[1 2 9 4 5 6 7 8]]\n",
|
||||
"\n",
|
||||
"y = x[:, np.newaxis]\n",
|
||||
"print(y.shape) # (8, 1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1]\n",
|
||||
"# [2]\n",
|
||||
"# [9]\n",
|
||||
"# [4]\n",
|
||||
"# [5]\n",
|
||||
"# [6]\n",
|
||||
"# [7]\n",
|
||||
"# [8]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.squeeze(a, axis=None)` 从数组的形状中删除单维度条目,即把shape中为1的维度去掉。\n",
|
||||
" - `a`表示输入的数组;\n",
|
||||
" - `axis`用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;\n",
|
||||
"\n",
|
||||
"在机器学习和深度学习中,通常算法的结果是可以表示向量的数组(即包含两对或以上的方括号形式[[]]),如果直接利用这个数组进行画图可能显示界面为空(见后面的示例)。我们可以利用`squeeze()`函数将表示向量的数组转换为秩为1的数组,这样利用 matplotlib 库函数画图时,就可以正常的显示结果了。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(10)\n",
|
||||
"print(x.shape) # (10,)\n",
|
||||
"x = x[np.newaxis, :]\n",
|
||||
"print(x.shape) # (1, 10)\n",
|
||||
"y = np.squeeze(x)\n",
|
||||
"print(y.shape) # (10,)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[[0], [1], [2]]])\n",
|
||||
"print(x.shape) # (1, 3, 1)\n",
|
||||
"print(x)\n",
|
||||
"# [[[0]\n",
|
||||
"# [1]\n",
|
||||
"# [2]]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x)\n",
|
||||
"print(y.shape) # (3,)\n",
|
||||
"print(y) # [0 1 2]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=0)\n",
|
||||
"print(y.shape) # (3, 1)\n",
|
||||
"print(y)\n",
|
||||
"# [[0]\n",
|
||||
"# [1]\n",
|
||||
"# [2]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=2)\n",
|
||||
"print(y.shape) # (1, 3)\n",
|
||||
"print(y) # [[0 1 2]]\n",
|
||||
"\n",
|
||||
"y = np.squeeze(x, axis=1)\n",
|
||||
"# ValueError: cannot select an axis to squeeze out which has size not equal to one\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 4, 9, 16, 25]])\n",
|
||||
"print(x.shape) # (1, 5)\n",
|
||||
"plt.plot(x)\n",
|
||||
"plt.show()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 4, 9, 16, 25]])\n",
|
||||
"x = np.squeeze(x)\n",
|
||||
"print(x.shape) # (5, )\n",
|
||||
"plt.plot(x)\n",
|
||||
"plt.show()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组组合\n",
|
||||
"\n",
|
||||
"如果要将两份数据组合到一起,就需要拼接操作。\n",
|
||||
"\n",
|
||||
"- `numpy.concatenate((a1, a2, ...), axis=0, out=None)` Join a sequence of arrays along an existing axis.\n",
|
||||
"\n",
|
||||
"【例】连接沿现有轴的数组序列(原来x,y都是一维的,拼接后的结果也是一维的)。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】原来x,y都是二维的,拼接后的结果也是二维的。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"z = np.concatenate([x, y], axis=1)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】x,y在原来的维度上进行拼接。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.concatenate([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"z = np.concatenate([x, y], axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"z = np.concatenate([x, y], axis=1)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.stack(arrays, axis=0, out=None)`Join a sequence of arrays along a new axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】沿着新的轴加入一系列数组(stack为增加维度的拼接)。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 7]\n",
|
||||
"# [2 8]\n",
|
||||
"# [3 9]]\n",
|
||||
"```\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 1, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 2 3]]\n",
|
||||
"#\n",
|
||||
"# [[7 8 9]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (1, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 2 3]\n",
|
||||
"# [7 8 9]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=2)\n",
|
||||
"print(z.shape) # (1, 3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[[1 7]\n",
|
||||
"# [2 8]\n",
|
||||
"# [3 9]]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 2 3]\n",
|
||||
"# [ 4 5 6]]\n",
|
||||
"# \n",
|
||||
"# [[ 7 8 9]\n",
|
||||
"# [10 11 12]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=1)\n",
|
||||
"print(z.shape) # (2, 2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 2 3]\n",
|
||||
"# [ 7 8 9]]\n",
|
||||
"# \n",
|
||||
"# [[ 4 5 6]\n",
|
||||
"# [10 11 12]]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y], axis=2)\n",
|
||||
"print(z.shape) # (2, 3, 2)\n",
|
||||
"print(z)\n",
|
||||
"# [[[ 1 7]\n",
|
||||
"# [ 2 8]\n",
|
||||
"# [ 3 9]]\n",
|
||||
"# \n",
|
||||
"# [[ 4 10]\n",
|
||||
"# [ 5 11]\n",
|
||||
"# [ 6 12]]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.vstack(tup)`Stack arrays in sequence vertically (row wise).\n",
|
||||
"- `numpy.hstack(tup)`Stack arrays in sequence horizontally (column wise). \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】一维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3])\n",
|
||||
"y = np.array([7, 8, 9])\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.stack([x, y])\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (6,)\n",
|
||||
"print(z)\n",
|
||||
"# [1 2 3 7 8 9]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y))\n",
|
||||
"print(z.shape) # (6,)\n",
|
||||
"print(z) # [1 2 3 7 8 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】二维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3]).reshape(1, 3)\n",
|
||||
"y = np.array([7, 8, 9]).reshape(1, 3)\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=0)\n",
|
||||
"print(z.shape) # (2, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (1, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=1)\n",
|
||||
"print(z.shape) # (1, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[1 2 3 7 8 9]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】二维的情况。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6]])\n",
|
||||
"y = np.array([[7, 8, 9], [10, 11, 12]])\n",
|
||||
"z = np.vstack((x, y))\n",
|
||||
"print(z.shape) # (4, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=0)\n",
|
||||
"print(z.shape) # (4, 3)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3]\n",
|
||||
"# [ 4 5 6]\n",
|
||||
"# [ 7 8 9]\n",
|
||||
"# [10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.hstack((x, y))\n",
|
||||
"print(z.shape) # (2, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"\n",
|
||||
"z = np.concatenate((x, y), axis=1)\n",
|
||||
"print(z.shape) # (2, 6)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1 2 3 7 8 9]\n",
|
||||
"# [ 4 5 6 10 11 12]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"`hstack(),vstack()`分别表示水平和竖直的拼接方式。在数据维度等于1时,比较特殊。而当维度大于或等于2时,它们的作用相当于`concatenate`,用于在已有轴上进行操作。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.hstack([np.array([1, 2, 3, 4]), 5])\n",
|
||||
"print(a) # [1 2 3 4 5]\n",
|
||||
"\n",
|
||||
"a = np.concatenate([np.array([1, 2, 3, 4]), 5])\n",
|
||||
"print(a)\n",
|
||||
"# all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 0 dimension(s)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组拆分\n",
|
||||
"\n",
|
||||
"- `numpy.split(ary, indices_or_sections, axis=0)` Split an array into multiple sub-arrays as views into ary.\n",
|
||||
"\n",
|
||||
"【例】拆分数组。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.split(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.vsplit(ary, indices_or_sections)` Split an array into multiple sub-arrays vertically (row-wise).\n",
|
||||
"\n",
|
||||
"【例】垂直切分是把数组按照高度切分\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.vsplit(x, 3)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, 3)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19]]), array([[21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = np.vsplit(x, [1])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]])]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = np.vsplit(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"y = np.split(x, [1, 3], axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13, 14]]), array([[16, 17, 18, 19],\n",
|
||||
"# [21, 22, 23, 24]]), array([], shape=(0, 4), dtype=int32)]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.hsplit(ary, indices_or_sections)` Split an array into multiple sub-arrays horizontally (column-wise).\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】水平切分是把数组按照宽度切分。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14],\n",
|
||||
" [16, 17, 18, 19],\n",
|
||||
" [21, 22, 23, 24]])\n",
|
||||
"y = np.hsplit(x, 2)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12],\n",
|
||||
"# [16, 17],\n",
|
||||
"# [21, 22]]), array([[13, 14],\n",
|
||||
"# [18, 19],\n",
|
||||
"# [23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, 2, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12],\n",
|
||||
"# [16, 17],\n",
|
||||
"# [21, 22]]), array([[13, 14],\n",
|
||||
"# [18, 19],\n",
|
||||
"# [23, 24]])]\n",
|
||||
"\n",
|
||||
"y = np.hsplit(x, [3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13],\n",
|
||||
"# [16, 17, 18],\n",
|
||||
"# [21, 22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11, 12, 13],\n",
|
||||
"# [16, 17, 18],\n",
|
||||
"# [21, 22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.hsplit(x, [1, 3])\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"\n",
|
||||
"y = np.split(x, [1, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [array([[11],\n",
|
||||
"# [16],\n",
|
||||
"# [21]]), array([[12, 13],\n",
|
||||
"# [17, 18],\n",
|
||||
"# [22, 23]]), array([[14],\n",
|
||||
"# [19],\n",
|
||||
"# [24]])]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 数组平铺\n",
|
||||
"\n",
|
||||
"- `numpy.tile(A, reps)` Construct an array by repeating A the number of times given by reps.\n",
|
||||
"\n",
|
||||
"`tile`是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来。\n",
|
||||
"\n",
|
||||
"【例】将原矩阵横向、纵向地复制。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2], [3, 4]])\n",
|
||||
"print(x)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (1, 3))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (3, 1))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.tile(x, (3, 3))\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]\n",
|
||||
"# [1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]\n",
|
||||
"# [1 2 1 2 1 2]\n",
|
||||
"# [3 4 3 4 3 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.repeat(a, repeats, axis=None)` Repeat elements of an array.\n",
|
||||
" - `axis=0`,沿着y轴复制,实际上增加了行数。\n",
|
||||
" - `axis=1`,沿着x轴复制,实际上增加了列数。\n",
|
||||
" - `repeats`,可以为一个数,也可以为一个矩阵。\n",
|
||||
" - `axis=None`时就会flatten当前矩阵,实际上就是变成了一个行向量。\n",
|
||||
"\n",
|
||||
"【例】重复数组的元素。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.repeat(3, 4)\n",
|
||||
"print(x) # [3 3 3 3]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2], [3, 4]])\n",
|
||||
"y = np.repeat(x, 2)\n",
|
||||
"print(y)\n",
|
||||
"# [1 1 2 2 3 3 4 4]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, 2, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, 2, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 2 2]\n",
|
||||
"# [3 3 4 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, [2, 3], axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 2]\n",
|
||||
"# [1 2]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]\n",
|
||||
"# [3 4]]\n",
|
||||
"\n",
|
||||
"y = np.repeat(x, [2, 3], axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 1 2 2 2]\n",
|
||||
"# [3 3 4 4 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 添加和删除元素\n",
|
||||
"\n",
|
||||
"- `numpy.unique(ar, return_index=False, return_inverse=False,return_counts=False, axis=None)` Find the unique elements of an array.\n",
|
||||
" - return_index:the indices of the input array that give the unique values\n",
|
||||
" - return_inverse:the indices of the unique array that reconstruct the input array\n",
|
||||
" - return_counts:the number of times each unique value comes up in the input array\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】查找数组的唯一元素。\n",
|
||||
"```python\n",
|
||||
"a=np.array([1,1,2,3,3,4,4])\n",
|
||||
"b=np.unique(a,return_counts=True)\n",
|
||||
"print(b[0][list(b[1]).index(1)])\n",
|
||||
"#2\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"- https://blog.csdn.net/csdn15698845876/article/details/73380803\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-08-30T13:01:49.899843Z",
|
||||
"start_time": "2020-08-30T13:01:49.895853Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"2\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"a=np.array([1,1,2,3,3,4,4])\n",
|
||||
"b=np.unique(a,return_counts=True)\n",
|
||||
"print(b[0][list(b[1]).index(1)])"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.193px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
309
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/练习-数组操作-变形-答案.ipynb
Normal file
309
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/练习-数组操作-变形-答案.ipynb
Normal file
@@ -0,0 +1,309 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**将 `arr`转换为2行的2维数组。**\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:数组的操作】\n",
|
||||
"- 如何改变数组的形状?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:47:23.972422Z",
|
||||
"start_time": "2020-09-06T02:47:23.965489Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]]\n",
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(10)\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"x = np.reshape(arr, newshape=[2, 5])\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"x = np.reshape(arr, newshape=[2, -1])\n",
|
||||
"print(x)\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**垂直堆叠数组a和数组b。**\n",
|
||||
"- `a = np.arange(10).reshape([2, -1])`\n",
|
||||
"- `b = np.repeat(1, 10).reshape([2, -1])`\n",
|
||||
"\n",
|
||||
"【知识点:数组操作】\n",
|
||||
"- 如何垂直叠加两个数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:48:08.620475Z",
|
||||
"start_time": "2020-09-06T02:48:08.614519Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]]\n",
|
||||
"[[1 1 1 1 1]\n",
|
||||
" [1 1 1 1 1]]\n",
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]\n",
|
||||
" [1 1 1 1 1]\n",
|
||||
" [1 1 1 1 1]]\n",
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]\n",
|
||||
" [1 1 1 1 1]\n",
|
||||
" [1 1 1 1 1]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.arange(10).reshape([2, -1])\n",
|
||||
"b = np.repeat(1, 10).reshape([2, -1])\n",
|
||||
"\n",
|
||||
"print(a)\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]]\n",
|
||||
"print(b)\n",
|
||||
"# [[1 1 1 1 1]\n",
|
||||
"# [1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"print(np.concatenate([a, b], axis=0))\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]\n",
|
||||
"# [1 1 1 1 1]\n",
|
||||
"# [1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"print(np.vstack([a, b]))\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]\n",
|
||||
"# [1 1 1 1 1]\n",
|
||||
"# [1 1 1 1 1]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**8. 将数组a与数组b水平堆叠。**\n",
|
||||
"- `a = np.arange(10).reshape([2, -1])`\n",
|
||||
"- `b = np.repeat(1, 10).reshape([2, -1])`\n",
|
||||
"\n",
|
||||
"【知识点:数组的操作】\n",
|
||||
"- 如何水平叠加两个数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:48:41.235432Z",
|
||||
"start_time": "2020-09-06T02:48:41.229447Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2 3 4]\n",
|
||||
" [5 6 7 8 9]]\n",
|
||||
"[[1 1 1 1 1]\n",
|
||||
" [1 1 1 1 1]]\n",
|
||||
"[[0 1 2 3 4 1 1 1 1 1]\n",
|
||||
" [5 6 7 8 9 1 1 1 1 1]]\n",
|
||||
"[[0 1 2 3 4 1 1 1 1 1]\n",
|
||||
" [5 6 7 8 9 1 1 1 1 1]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.arange(10).reshape([2, -1])\n",
|
||||
"b = np.repeat(1, 10).reshape([2, -1])\n",
|
||||
"\n",
|
||||
"print(a)\n",
|
||||
"# [[0 1 2 3 4]\n",
|
||||
"# [5 6 7 8 9]]\n",
|
||||
"print(b)\n",
|
||||
"# [[1 1 1 1 1]\n",
|
||||
"# [1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"print(np.concatenate([a, b], axis=1))\n",
|
||||
"# [[0 1 2 3 4 1 1 1 1 1]\n",
|
||||
"# [5 6 7 8 9 1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"print(np.hstack([a, b]))\n",
|
||||
"# [[0 1 2 3 4 1 1 1 1 1]\n",
|
||||
"# [5 6 7 8 9 1 1 1 1 1]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:15:03.024776Z",
|
||||
"start_time": "2020-09-06T03:15:03.019739Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**在给定的numpy数组中找到重复的条目(第二次出现以后),并将它们标记为True。第一次出现应为False。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.randint(0, 5, 10)`\n",
|
||||
"\n",
|
||||
"【知识点:数组操作】\n",
|
||||
"- 如何在numpy数组中找到重复值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:15:33.059248Z",
|
||||
"start_time": "2020-09-06T03:15:33.054241Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0 0 3 0 2 4 2 2 2 2]\n",
|
||||
"[False True False True False False True True True True]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"a = np.random.randint(0, 5, 10)\n",
|
||||
"print(a)\n",
|
||||
"# [0 0 3 0 2 4 2 2 2 2]\n",
|
||||
"b = np.full(10, True)\n",
|
||||
"vals, counts = np.unique(a, return_index=True)\n",
|
||||
"b[counts] = False\n",
|
||||
"print(b)\n",
|
||||
"# [False True False True False False True True True True]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
121
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/练习-数组操作-变形.ipynb
Normal file
121
IntroductionToNumpy/numpy/task03-2天-数组的操作-变形/练习-数组操作-变形.ipynb
Normal file
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将 `arr`转换为2行的2维数组。**\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:数组的操作】\n",
|
||||
"- 如何改变数组的形状?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **垂直堆叠数组a和数组b。**\n",
|
||||
"- `a = np.arange(10).reshape([2, -1])`\n",
|
||||
"- `b = np.repeat(1, 10).reshape([2, -1])`\n",
|
||||
"\n",
|
||||
"【知识点:数组操作】\n",
|
||||
"- 如何垂直叠加两个数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **8. 将数组a与数组b水平堆叠。**\n",
|
||||
"- `a = np.arange(10).reshape([2, -1])`\n",
|
||||
"- `b = np.repeat(1, 10).reshape([2, -1])`\n",
|
||||
"\n",
|
||||
"【知识点:数组的操作】\n",
|
||||
"- 如何水平叠加两个数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **在给定的numpy数组中找到重复的条目(第二次出现以后),并将它们标记为True。第一次出现应为False。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.randint(0, 5, 10)`\n",
|
||||
"\n",
|
||||
"【知识点:数组操作】\n",
|
||||
"- 如何在numpy数组中找到重复值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,828 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 向量化和广播\n",
|
||||
"\n",
|
||||
"向量化和广播这两个概念是 numpy 内部实现的基础。有了向量化,编写代码时无需使用显式循环。这些循环实际上不能省略,只不过是在内部实现,被代码中的其他结构代替。向量化的应用使得代码更简洁,可读性更强,也可以说使用了向量化方法的代码看上去更“Pythonic”。\n",
|
||||
"\n",
|
||||
"广播(Broadcasting)机制描述了 numpy 如何在算术运算期间处理具有不同形状的数组,让较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。并不是所有的维度都要彼此兼容才符合广播机制的要求,但它们必须满足一定的条件。\n",
|
||||
"\n",
|
||||
"若两个数组的各维度兼容,也就是两个数组的每一维等长,或其中一个数组为 一维,那么广播机制就适用。如果这两个条件不满足,numpy就会抛出异常,说两个数组不兼容。\n",
|
||||
"\n",
|
||||
"总结来说,广播的规则有三个:\n",
|
||||
"- 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1。\n",
|
||||
"- 如果shape维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;\n",
|
||||
"- 如果shape维度不匹配,但是没有任何一个维度是1,则匹配引发错误;\n",
|
||||
"\n",
|
||||
"【例】二维数组加一维数组\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4)\n",
|
||||
"y = np.ones((3, 4))\n",
|
||||
"print(x.shape) # (4,)\n",
|
||||
"print(y.shape) # (3, 4)\n",
|
||||
"\n",
|
||||
"print((x + y).shape) # (3, 4)\n",
|
||||
"print(x + y)\n",
|
||||
"# [[1. 2. 3. 4.]\n",
|
||||
"# [1. 2. 3. 4.]\n",
|
||||
"# [1. 2. 3. 4.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】两个数组均需要广播\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4).reshape(4, 1)\n",
|
||||
"y = np.ones(5)\n",
|
||||
"\n",
|
||||
"print(x.shape) # (4, 1)\n",
|
||||
"print(y.shape) # (5,)\n",
|
||||
"\n",
|
||||
"print((x + y).shape) # (4, 5)\n",
|
||||
"print(x + y)\n",
|
||||
"# [[1. 1. 1. 1. 1.]\n",
|
||||
"# [2. 2. 2. 2. 2.]\n",
|
||||
"# [3. 3. 3. 3. 3.]\n",
|
||||
"# [4. 4. 4. 4. 4.]]\n",
|
||||
"\n",
|
||||
"x = np.array([0.0, 10.0, 20.0, 30.0])\n",
|
||||
"y = np.array([1.0, 2.0, 3.0])\n",
|
||||
"z = x[:, np.newaxis] + y\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1. 2. 3.]\n",
|
||||
"# [11. 12. 13.]\n",
|
||||
"# [21. 22. 23.]\n",
|
||||
"# [31. 32. 33.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】不匹配报错的例子\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4)\n",
|
||||
"y = np.ones(5)\n",
|
||||
"\n",
|
||||
"print(x.shape) # (4,)\n",
|
||||
"print(y.shape) # (5,)\n",
|
||||
"\n",
|
||||
"print(x + y)\n",
|
||||
"# ValueError: operands could not be broadcast together with shapes (4,) (5,) \n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数学函数\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 算数运算\n",
|
||||
"### numpy.add\n",
|
||||
"### numpy.subtract\n",
|
||||
"### numpy.multiply\n",
|
||||
"\n",
|
||||
"- `numpy.add(x1, x2, *args, **kwargs)` Add arguments element-wise.\n",
|
||||
"- `numpy.subtract(x1, x2, *args, **kwargs)` Subtract arguments element-wise.\n",
|
||||
"- `numpy.multiply(x1, x2, *args, **kwargs)` Multiply arguments element-wise.\n",
|
||||
"- `numpy.divide(x1, x2, *args, **kwargs)` Returns a true division of the inputs, element-wise.\n",
|
||||
"- `numpy.floor_divide(x1, x2, *args, **kwargs)` Return the largest integer smaller or equal to the division of the inputs.\n",
|
||||
"- `numpy.power(x1, x2, *args, **kwargs)` First array elements raised to powers from second array, element-wise.\n",
|
||||
"\n",
|
||||
"在 numpy 中对以上函数进行了运算符的重载,且运算符为 **元素级**。也就是说,它们只用于位置相同的元素之间,所得到的运算结果组成一个新的数组。\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = x + 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.add(x, 1))\n",
|
||||
"# [2 3 4 5 6 7 8 9]\n",
|
||||
"\n",
|
||||
"y = x - 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.subtract(x, 1))\n",
|
||||
"# [0 1 2 3 4 5 6 7]\n",
|
||||
"\n",
|
||||
"y = x * 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.multiply(x, 2))\n",
|
||||
"# [ 2 4 6 8 10 12 14 16]\n",
|
||||
"\n",
|
||||
"y = x / 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.divide(x, 2))\n",
|
||||
"# [0.5 1. 1.5 2. 2.5 3. 3.5 4. ]\n",
|
||||
"\n",
|
||||
"y = x // 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.floor_divide(x, 2))\n",
|
||||
"# [0 1 1 2 2 3 3 4]\n",
|
||||
"\n",
|
||||
"y = x ** 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [ 1 4 9 16 25 36 49 64]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x + 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.add(x, 1))\n",
|
||||
"# [[12 13 14 15 16]\n",
|
||||
"# [17 18 19 20 21]\n",
|
||||
"# [22 23 24 25 26]\n",
|
||||
"# [27 28 29 30 31]\n",
|
||||
"# [32 33 34 35 36]]\n",
|
||||
"\n",
|
||||
"y = x - 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.subtract(x, 1))\n",
|
||||
"# [[10 11 12 13 14]\n",
|
||||
"# [15 16 17 18 19]\n",
|
||||
"# [20 21 22 23 24]\n",
|
||||
"# [25 26 27 28 29]\n",
|
||||
"# [30 31 32 33 34]]\n",
|
||||
"\n",
|
||||
"y = x * 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.multiply(x, 2))\n",
|
||||
"# [[22 24 26 28 30]\n",
|
||||
"# [32 34 36 38 40]\n",
|
||||
"# [42 44 46 48 50]\n",
|
||||
"# [52 54 56 58 60]\n",
|
||||
"# [62 64 66 68 70]]\n",
|
||||
"\n",
|
||||
"y = x / 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.divide(x, 2))\n",
|
||||
"# [[ 5.5 6. 6.5 7. 7.5]\n",
|
||||
"# [ 8. 8.5 9. 9.5 10. ]\n",
|
||||
"# [10.5 11. 11.5 12. 12.5]\n",
|
||||
"# [13. 13.5 14. 14.5 15. ]\n",
|
||||
"# [15.5 16. 16.5 17. 17.5]]\n",
|
||||
"\n",
|
||||
"y = x // 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.floor_divide(x, 2))\n",
|
||||
"# [[ 5 6 6 7 7]\n",
|
||||
"# [ 8 8 9 9 10]\n",
|
||||
"# [10 11 11 12 12]\n",
|
||||
"# [13 13 14 14 15]\n",
|
||||
"# [15 16 16 17 17]]\n",
|
||||
"\n",
|
||||
"y = x ** 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.arange(1, 6)\n",
|
||||
"print(y)\n",
|
||||
"# [1 2 3 4 5]\n",
|
||||
"\n",
|
||||
"z = x + y\n",
|
||||
"print(z)\n",
|
||||
"print(np.add(x, y))\n",
|
||||
"# [[12 14 16 18 20]\n",
|
||||
"# [17 19 21 23 25]\n",
|
||||
"# [22 24 26 28 30]\n",
|
||||
"# [27 29 31 33 35]\n",
|
||||
"# [32 34 36 38 40]]\n",
|
||||
"\n",
|
||||
"z = x - y\n",
|
||||
"print(z)\n",
|
||||
"print(np.subtract(x, y))\n",
|
||||
"# [[10 10 10 10 10]\n",
|
||||
"# [15 15 15 15 15]\n",
|
||||
"# [20 20 20 20 20]\n",
|
||||
"# [25 25 25 25 25]\n",
|
||||
"# [30 30 30 30 30]]\n",
|
||||
"\n",
|
||||
"z = x * y\n",
|
||||
"print(z)\n",
|
||||
"print(np.multiply(x, y))\n",
|
||||
"# [[ 11 24 39 56 75]\n",
|
||||
"# [ 16 34 54 76 100]\n",
|
||||
"# [ 21 44 69 96 125]\n",
|
||||
"# [ 26 54 84 116 150]\n",
|
||||
"# [ 31 64 99 136 175]]\n",
|
||||
"\n",
|
||||
"z = x / y\n",
|
||||
"print(z)\n",
|
||||
"print(np.divide(x, y))\n",
|
||||
"# [[11. 6. 4.33333333 3.5 3. ]\n",
|
||||
"# [16. 8.5 6. 4.75 4. ]\n",
|
||||
"# [21. 11. 7.66666667 6. 5. ]\n",
|
||||
"# [26. 13.5 9.33333333 7.25 6. ]\n",
|
||||
"# [31. 16. 11. 8.5 7. ]]\n",
|
||||
"\n",
|
||||
"z = x // y\n",
|
||||
"print(z)\n",
|
||||
"print(np.floor_divide(x, y))\n",
|
||||
"# [[11 6 4 3 3]\n",
|
||||
"# [16 8 6 4 4]\n",
|
||||
"# [21 11 7 6 5]\n",
|
||||
"# [26 13 9 7 6]\n",
|
||||
"# [31 16 11 8 7]]\n",
|
||||
"\n",
|
||||
"z = x ** np.full([1, 5], 2)\n",
|
||||
"print(z)\n",
|
||||
"print(np.power(x, np.full([5, 5], 2)))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.arange(1, 26).reshape([5, 5])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 1 2 3 4 5]\n",
|
||||
"# [ 6 7 8 9 10]\n",
|
||||
"# [11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]]\n",
|
||||
"\n",
|
||||
"z = x + y\n",
|
||||
"print(z)\n",
|
||||
"print(np.add(x, y))\n",
|
||||
"# [[12 14 16 18 20]\n",
|
||||
"# [22 24 26 28 30]\n",
|
||||
"# [32 34 36 38 40]\n",
|
||||
"# [42 44 46 48 50]\n",
|
||||
"# [52 54 56 58 60]]\n",
|
||||
"\n",
|
||||
"z = x - y\n",
|
||||
"print(z)\n",
|
||||
"print(np.subtract(x, y))\n",
|
||||
"# [[10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]]\n",
|
||||
"\n",
|
||||
"z = x * y\n",
|
||||
"print(z)\n",
|
||||
"print(np.multiply(x, y))\n",
|
||||
"# [[ 11 24 39 56 75]\n",
|
||||
"# [ 96 119 144 171 200]\n",
|
||||
"# [231 264 299 336 375]\n",
|
||||
"# [416 459 504 551 600]\n",
|
||||
"# [651 704 759 816 875]]\n",
|
||||
"\n",
|
||||
"z = x / y\n",
|
||||
"print(z)\n",
|
||||
"print(np.divide(x, y))\n",
|
||||
"# [[11. 6. 4.33333333 3.5 3. ]\n",
|
||||
"# [ 2.66666667 2.42857143 2.25 2.11111111 2. ]\n",
|
||||
"# [ 1.90909091 1.83333333 1.76923077 1.71428571 1.66666667]\n",
|
||||
"# [ 1.625 1.58823529 1.55555556 1.52631579 1.5 ]\n",
|
||||
"# [ 1.47619048 1.45454545 1.43478261 1.41666667 1.4 ]]\n",
|
||||
"\n",
|
||||
"z = x // y\n",
|
||||
"print(z)\n",
|
||||
"print(np.floor_divide(x, y))\n",
|
||||
"# [[11 6 4 3 3]\n",
|
||||
"# [ 2 2 2 2 2]\n",
|
||||
"# [ 1 1 1 1 1]\n",
|
||||
"# [ 1 1 1 1 1]\n",
|
||||
"# [ 1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"z = x ** np.full([5, 5], 2)\n",
|
||||
"print(z)\n",
|
||||
"print(np.power(x, np.full([5, 5], 2)))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.sqrt(x, *args, **kwargs)` Return the non-negative square-root of an array, element-wise.\n",
|
||||
"- `numpy.square(x, *args, **kwargs)` Return the element-wise square of the input.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(1, 5)\n",
|
||||
"print(x) # [1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.sqrt(x)\n",
|
||||
"print(y)\n",
|
||||
"# [1. 1.41421356 1.73205081 2. ]\n",
|
||||
"print(np.power(x, 0.5))\n",
|
||||
"# [1. 1.41421356 1.73205081 2. ]\n",
|
||||
"\n",
|
||||
"y = np.square(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 1 4 9 16]\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [ 1 4 9 16]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 三角函数\n",
|
||||
"\n",
|
||||
"- `numpy.sin(x, *args, **kwargs)` Trigonometric sine, element-wise.\n",
|
||||
"- `numpy.cos(x, *args, **kwargs)` Cosine element-wise.\n",
|
||||
"- `numpy.tan(x, *args, **kwargs)` Compute tangent element-wise.\n",
|
||||
"- `numpy.arcsin(x, *args, **kwargs)` Inverse sine, element-wise.\n",
|
||||
"- `numpy.arccos(x, *args, **kwargs)` Trigonometric inverse cosine, element-wise.\n",
|
||||
"- `numpy.arctan(x, *args, **kwargs)` Trigonometric inverse tangent, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"**通用函数**(universal function)通常叫作ufunc,它对数组中的各个元素逐一进行操作。这表明,通用函数分别处理输入数组的每个元素,生成的结果组成一个新的输出数组。输出数组的大小跟输入数组相同。\n",
|
||||
"\n",
|
||||
"三角函数等很多数学运算符合通用函数的定义,例如,计算平方根的`sqrt()`函数、用来取对数的`log()`函数和求正弦值的`sin()`函数。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=np.pi / 2, num=10)\n",
|
||||
"print(x)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.sin(x)\n",
|
||||
"print(y)\n",
|
||||
"# [0. 0.17364818 0.34202014 0.5 0.64278761 0.76604444\n",
|
||||
"# 0.8660254 0.93969262 0.98480775 1. ]\n",
|
||||
"\n",
|
||||
"z = np.arcsin(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.cos(x)\n",
|
||||
"print(y)\n",
|
||||
"# [1.00000000e+00 9.84807753e-01 9.39692621e-01 8.66025404e-01\n",
|
||||
"# 7.66044443e-01 6.42787610e-01 5.00000000e-01 3.42020143e-01\n",
|
||||
"# 1.73648178e-01 6.12323400e-17]\n",
|
||||
"\n",
|
||||
"z = np.arccos(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.tan(x)\n",
|
||||
"print(y)\n",
|
||||
"# [0.00000000e+00 1.76326981e-01 3.63970234e-01 5.77350269e-01\n",
|
||||
"# 8.39099631e-01 1.19175359e+00 1.73205081e+00 2.74747742e+00\n",
|
||||
"# 5.67128182e+00 1.63312394e+16]\n",
|
||||
"\n",
|
||||
"z = np.arctan(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 指数和对数\n",
|
||||
"\n",
|
||||
"- `numpy.exp(x, *args, **kwargs)` Calculate the exponential of all elements in the input array.\n",
|
||||
"- `numpy.log(x, *args, **kwargs)` Natural logarithm, element-wise.\n",
|
||||
"- `numpy.exp2(x, *args, **kwargs)` Calculate `2**p` for all `p` in the input array.\n",
|
||||
"- `numpy.log2(x, *args, **kwargs)` Base-2 logarithm of `x`.\n",
|
||||
"- `numpy.log10(x, *args, **kwargs)` Return the base 10 logarithm of the input array, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】The natural logarithm `log` is the inverse of the exponential function, so that `log(exp(x)) = x`. The natural logarithm is logarithm in base `e`.\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(1, 5)\n",
|
||||
"print(x)\n",
|
||||
"# [1 2 3 4]\n",
|
||||
"y = np.exp(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 2.71828183 7.3890561 20.08553692 54.59815003]\n",
|
||||
"z = np.log(y)\n",
|
||||
"print(z)\n",
|
||||
"# [1. 2. 3. 4.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 加法函数、乘法函数\n",
|
||||
"\n",
|
||||
"- `numpy.sum(a[, axis=None, dtype=None, out=None, …])` Sum of array elements over a given axis.\n",
|
||||
"\n",
|
||||
"通过不同的 `axis`,numpy 会沿着不同的方向进行操作:如果不设置,那么对所有的元素操作;如果`axis=0`,则沿着纵轴进行操作;`axis=1`,则沿着横轴进行操作。但这只是简单的二位数组,如果是多维的呢?可以总结为一句话:设`axis=i`,则 numpy 沿着第`i`个下标变化的方向进行操作。\n",
|
||||
"\n",
|
||||
"- `numpy.cumsum(a, axis=None, dtype=None, out=None)` Return the cumulative sum of the elements along a given axis.\n",
|
||||
"\n",
|
||||
"**聚合函数** 是指对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因而,求数组所有元素之和的函数就是聚合函数。`ndarray`类实现了多个这样的函数。\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上的数组元素的总和。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.sum(x)\n",
|
||||
"print(y) # 575\n",
|
||||
"\n",
|
||||
"y = np.sum(x, axis=0)\n",
|
||||
"print(y) # [105 110 115 120 125]\n",
|
||||
"\n",
|
||||
"y = np.sum(x, axis=1)\n",
|
||||
"print(y) # [ 65 90 115 140 165]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上的数组元素的累加和。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.cumsum(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 11 23 36 50 65 81 98 116 135 155 176 198 221 245 270 296 323 351\n",
|
||||
"# 380 410 441 473 506 540 575]\n",
|
||||
"\n",
|
||||
"y = np.cumsum(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 12 13 14 15]\n",
|
||||
"# [ 27 29 31 33 35]\n",
|
||||
"# [ 48 51 54 57 60]\n",
|
||||
"# [ 74 78 82 86 90]\n",
|
||||
"# [105 110 115 120 125]]\n",
|
||||
"\n",
|
||||
"y = np.cumsum(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 23 36 50 65]\n",
|
||||
"# [ 16 33 51 70 90]\n",
|
||||
"# [ 21 43 66 90 115]\n",
|
||||
"# [ 26 53 81 110 140]\n",
|
||||
"# [ 31 63 96 130 165]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.prod(a[, axis=None, dtype=None, out=None, …])` Return the product of array elements over a given axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.cumprod(a, axis=None, dtype=None, out=None)` Return the cumulative product of elements along a given axis.\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上数组元素的乘积。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.prod(x)\n",
|
||||
"print(y) # 788529152\n",
|
||||
"\n",
|
||||
"y = np.prod(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [2978976 3877632 4972968 6294624 7875000]\n",
|
||||
"\n",
|
||||
"y = np.prod(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [ 360360 1860480 6375600 17100720 38955840]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上数组元素的累乘。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.cumprod(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 11 132 1716 24024 360360 5765760\n",
|
||||
"# 98017920 1764322560 -837609728 427674624 391232512 17180672\n",
|
||||
"# 395155456 893796352 870072320 1147043840 905412608 -418250752\n",
|
||||
"# 755630080 1194065920 -1638662144 -897581056 444596224 -2063597568\n",
|
||||
"# 788529152]\n",
|
||||
"\n",
|
||||
"y = np.cumprod(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 12 13 14 15]\n",
|
||||
"# [ 176 204 234 266 300]\n",
|
||||
"# [ 3696 4488 5382 6384 7500]\n",
|
||||
"# [ 96096 121176 150696 185136 225000]\n",
|
||||
"# [2978976 3877632 4972968 6294624 7875000]]\n",
|
||||
"\n",
|
||||
"y = np.cumprod(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 132 1716 24024 360360]\n",
|
||||
"# [ 16 272 4896 93024 1860480]\n",
|
||||
"# [ 21 462 10626 255024 6375600]\n",
|
||||
"# [ 26 702 19656 570024 17100720]\n",
|
||||
"# [ 31 992 32736 1113024 38955840]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue)` Calculate the n-th discrete difference along the given axis.\n",
|
||||
" - a:输入矩阵\n",
|
||||
" - n:可选,代表要执行几次差值\n",
|
||||
" - axis:默认是最后一个\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The first difference is given by `out[i] = a[i+1] - a[i]` along the given axis, higher differences are calculated by using `diff` recursively.\n",
|
||||
"\n",
|
||||
"【例】沿着指定轴计算第N维的离散差值。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"A = np.arange(2, 14).reshape((3, 4))\n",
|
||||
"A[1, 1] = 8\n",
|
||||
"print(A)\n",
|
||||
"# [[ 2 3 4 5]\n",
|
||||
"# [ 6 8 8 9]\n",
|
||||
"# [10 11 12 13]]\n",
|
||||
"print(np.diff(A))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [2 0 1]\n",
|
||||
"# [1 1 1]]\n",
|
||||
"print(np.diff(A, axis=0))\n",
|
||||
"# [[4 5 4 4]\n",
|
||||
"# [4 3 4 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 四舍五入\n",
|
||||
"\n",
|
||||
"- `numpy.around(a, decimals=0, out=None)` Evenly round to the given number of decimals.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】将数组舍入到给定的小数位数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(3, 3) * 10\n",
|
||||
"print(x)\n",
|
||||
"# [[6.59144457 3.78566113 8.15321227]\n",
|
||||
"# [1.68241475 3.78753332 7.68886328]\n",
|
||||
"# [2.84255822 9.58106727 7.86678037]]\n",
|
||||
"\n",
|
||||
"y = np.around(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 7. 4. 8.]\n",
|
||||
"# [ 2. 4. 8.]\n",
|
||||
"# [ 3. 10. 8.]]\n",
|
||||
"\n",
|
||||
"y = np.around(x, decimals=2)\n",
|
||||
"print(y)\n",
|
||||
"# [[6.59 3.79 8.15]\n",
|
||||
"# [1.68 3.79 7.69]\n",
|
||||
"# [2.84 9.58 7.87]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.ceil(x, *args, **kwargs)` Return the ceiling of the input, element-wise.\n",
|
||||
"- `numpy.floor(x, *args, **kwargs)` Return the floor of the input, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(3, 3) * 10\n",
|
||||
"print(x)\n",
|
||||
"# [[0.67847795 1.33073923 4.53920122]\n",
|
||||
"# [7.55724676 5.88854047 2.65502046]\n",
|
||||
"# [8.67640444 8.80110812 5.97528726]]\n",
|
||||
"\n",
|
||||
"y = np.ceil(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[1. 2. 5.]\n",
|
||||
"# [8. 6. 3.]\n",
|
||||
"# [9. 9. 6.]]\n",
|
||||
"\n",
|
||||
"y = np.floor(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[0. 1. 4.]\n",
|
||||
"# [7. 5. 2.]\n",
|
||||
"# [8. 8. 5.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 杂项\n",
|
||||
"\n",
|
||||
"- `numpy.clip(a, a_min, a_max, out=None, **kwargs):` Clip (limit) the values in an array.\n",
|
||||
"\n",
|
||||
"Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of `[0, 1]` is specified, values smaller than 0 become 0, and values larger than 1 become 1.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】裁剪(限制)数组中的值。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.clip(x, a_min=20, a_max=30)\n",
|
||||
"print(y)\n",
|
||||
"# [[20 20 20 20 20]\n",
|
||||
"# [20 20 20 20 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [30 30 30 30 30]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.absolute(x, *args, **kwargs)` Calculate the absolute value element-wise. \n",
|
||||
"- `numpy.abs(x, *args, **kwargs)` is a shorthand for this function.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"# [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.abs(x)\n",
|
||||
"print(y)\n",
|
||||
"# [5 4 3 2 1 0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.absolute(x)\n",
|
||||
"print(y)\n",
|
||||
"# [5 4 3 2 1 0 1 2 3 4]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.sign(x, *args, **kwargs)` Returns an element-wise indication of the sign of a number.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"#[-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"print(np.sign(x))\n",
|
||||
"#[-1 -1 -1 -1 -1 0 1 1 1 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"- https://mp.weixin.qq.com/s/RWsGvvmw4ptf7d8zPIDEJw\n",
|
||||
"- https://blog.csdn.net/hanshuobest/article/details/78558826?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-08-30T17:00:33.199734Z",
|
||||
"start_time": "2020-08-30T17:00:33.194782Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"[-1 -1 -1 -1 -1 0 1 1 1 1]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"print(np.sign(x))"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,502 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 逻辑函数\n",
|
||||
"\n",
|
||||
"## 真值测试\n",
|
||||
"### numpy.all\n",
|
||||
"### numpy.any\n",
|
||||
"\n",
|
||||
"- `numpy.all(a, axis=None, out=None, keepdims=np._NoValue)` Test whether all array elements along a given axis evaluate to True.\n",
|
||||
"- `numpy.any(a, axis=None, out=None, keepdims=np._NoValue)` Test whether any array element along a given axis evaluates to True.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([0, 4, 5])\n",
|
||||
"b = np.copy(a)\n",
|
||||
"print(np.all(a == b)) # True\n",
|
||||
"print(np.any(a == b)) # True\n",
|
||||
"\n",
|
||||
"b[0] = 1\n",
|
||||
"print(np.all(a == b)) # False\n",
|
||||
"print(np.any(a == b)) # True\n",
|
||||
"\n",
|
||||
"print(np.all([1.0, np.nan])) # True\n",
|
||||
"print(np.any([1.0, np.nan])) # True\n",
|
||||
"\n",
|
||||
"a = np.eye(3)\n",
|
||||
"print(np.all(a, axis=0)) # [False False False]\n",
|
||||
"print(np.any(a, axis=0)) # [ True True True]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 数组内容\n",
|
||||
"\n",
|
||||
"- `numpy.isnan(x, *args, **kwargs)` Test element-wise for NaN and return result as a boolean array.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"a=np.array([1,2,np.nan])\n",
|
||||
"print(np.isnan(a))\n",
|
||||
"#[False False True]\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 逻辑运算\n",
|
||||
"\n",
|
||||
"- `numpy.logical_not(x, *args, **kwargs)`Compute the truth value of NOT x element-wise.\n",
|
||||
"- `numpy.logical_and(x1, x2, *args, **kwargs)` Compute the truth value of x1 AND x2 element-wise.\n",
|
||||
"- `numpy.logical_or(x1, x2, *args, **kwargs)`Compute the truth value of x1 OR x2 element-wise.\n",
|
||||
"- `numpy.logical_xor(x1, x2, *args, **kwargs)`Compute the truth value of x1 XOR x2, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"【例】计算非x元素的真值。\n",
|
||||
"\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"print(np.logical_not(3)) \n",
|
||||
"# False\n",
|
||||
"print(np.logical_not([True, False, 0, 1]))\n",
|
||||
"# [False True True False]\n",
|
||||
"\n",
|
||||
"x = np.arange(5)\n",
|
||||
"print(np.logical_not(x < 3))\n",
|
||||
"# [False False False True True]\n",
|
||||
"\n",
|
||||
"【例】计算x1 AND x2元素的真值。\n",
|
||||
"\n",
|
||||
"print(np.logical_and(True, False)) \n",
|
||||
"# False\n",
|
||||
"print(np.logical_and([True, False], [True, False]))\n",
|
||||
"# [ True False]\n",
|
||||
"print(np.logical_and(x > 1, x < 4))\n",
|
||||
"# [False False True True False]\n",
|
||||
"\n",
|
||||
"【例】逐元素计算x1 OR x2的真值。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"print(np.logical_or(True, False))\n",
|
||||
"# True\n",
|
||||
"print(np.logical_or([True, False], [False, False]))\n",
|
||||
"# [ True False]\n",
|
||||
"print(np.logical_or(x < 1, x > 3))\n",
|
||||
"# [ True False False False True]\n",
|
||||
"\n",
|
||||
"【例】计算x1 XOR x2的真值,按元素计算。\n",
|
||||
"\n",
|
||||
"print(np.logical_xor(True, False))\n",
|
||||
"# True\n",
|
||||
"print(np.logical_xor([True, True, False, False], [True, False, True, False]))\n",
|
||||
"# [False True True False]\n",
|
||||
"print(np.logical_xor(x < 1, x > 3))\n",
|
||||
"# [ True False False False True]\n",
|
||||
"print(np.logical_xor(0, np.eye(2)))\n",
|
||||
"# [[ True False]\n",
|
||||
"# [False True]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 对照\n",
|
||||
"\n",
|
||||
"- `numpy.greater(x1, x2, *args, **kwargs)` Return the truth value of (x1 > x2) element-wise.\n",
|
||||
"- `numpy.greater_equal(x1, x2, *args, **kwargs)` Return the truth value of (x1 >= x2) element-wise.\n",
|
||||
"- `numpy.equal(x1, x2, *args, **kwargs)` Return (x1 == x2) element-wise.\n",
|
||||
"- `numpy.not_equal(x1, x2, *args, **kwargs)` Return (x1 != x2) element-wise.\n",
|
||||
"- `numpy.less(x1, x2, *args, **kwargs)` Return the truth value of (x1 < x2) element-wise.\n",
|
||||
"- `numpy.less_equal(x1, x2, *args, **kwargs)` Return the truth value of (x1 =< x2) element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】numpy对以上对照函数进行了运算符的重载。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"\n",
|
||||
"y = x > 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater(x, 2))\n",
|
||||
"# [False False True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x >= 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater_equal(x, 2))\n",
|
||||
"# [False True True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x == 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.equal(x, 2))\n",
|
||||
"# [False True False False False False False False]\n",
|
||||
"\n",
|
||||
"y = x != 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.not_equal(x, 2))\n",
|
||||
"# [ True False True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x < 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.less(x, 2))\n",
|
||||
"# [ True False False False False False False False]\n",
|
||||
"\n",
|
||||
"y = x <= 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.less_equal(x, 2))\n",
|
||||
"# [ True True False False False False False False]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x > 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"y = x >= 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater_equal(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"y = x == 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.equal(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"y = x != 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.not_equal(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = x < 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.less(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"y = x <= 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.less_equal(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200611)\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.random.randint(10, 40, [5, 5])\n",
|
||||
"print(y)\n",
|
||||
"# [[32 28 31 33 37]\n",
|
||||
"# [23 37 37 30 29]\n",
|
||||
"# [32 24 10 33 15]\n",
|
||||
"# [27 17 10 36 16]\n",
|
||||
"# [25 32 23 39 34]]\n",
|
||||
"\n",
|
||||
"z = x > y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False True False True]\n",
|
||||
"# [False True True False True]\n",
|
||||
"# [ True False True False True]]\n",
|
||||
"\n",
|
||||
"z = x >= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater_equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False True False True]\n",
|
||||
"# [False True True False True]\n",
|
||||
"# [ True True True False True]]\n",
|
||||
"\n",
|
||||
"z = x == y\n",
|
||||
"print(z)\n",
|
||||
"print(np.equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False True False False False]]\n",
|
||||
"\n",
|
||||
"z = x != y\n",
|
||||
"print(z)\n",
|
||||
"print(np.not_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True False True True True]]\n",
|
||||
"\n",
|
||||
"z = x < y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True False True False]\n",
|
||||
"# [ True False False True False]\n",
|
||||
"# [False False False True False]]\n",
|
||||
"\n",
|
||||
"z = x <= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True False True False]\n",
|
||||
"# [ True False False True False]\n",
|
||||
"# [False True False True False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"np.random.seed(20200611)\n",
|
||||
"y = np.random.randint(10, 50, 5)\n",
|
||||
"\n",
|
||||
"print(y)\n",
|
||||
"# [32 37 30 24 10]\n",
|
||||
"\n",
|
||||
"z = x > y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater(x, y))\n",
|
||||
"# [[False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False True True True]]\n",
|
||||
"\n",
|
||||
"z = x >= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater_equal(x, y))\n",
|
||||
"# [[False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False True True True]]\n",
|
||||
"\n",
|
||||
"z = x == y\n",
|
||||
"print(z)\n",
|
||||
"print(np.equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False True False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"z = x != y\n",
|
||||
"print(z)\n",
|
||||
"print(np.not_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True False True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"z = x < y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less(x, y))\n",
|
||||
"# [[ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True False False False]]\n",
|
||||
"\n",
|
||||
"z = x <= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less_equal(x, y))\n",
|
||||
"# [[ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True False False False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.isclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)` Returns a boolean array where two arrays are element-wise equal within a tolerance.\n",
|
||||
"- `numpy.allclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)` Returns True if two arrays are element-wise equal within a tolerance. \n",
|
||||
"\n",
|
||||
"`numpy.allclose()` 等价于 `numpy.all(isclose(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan))`。\n",
|
||||
"\n",
|
||||
"The tolerance values are positive, typically very small numbers. The relative difference (`rtol * abs(b)`) and the absolute difference `atol` are added together to compare against the absolute difference between `a` and `b`.\n",
|
||||
"\n",
|
||||
"判断是否为True的计算依据:\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"np.absolute(a - b) <= (atol + rtol * absolute(b))\n",
|
||||
"\n",
|
||||
"- atol:float,绝对公差。\n",
|
||||
"- rtol:float,相对公差。\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"NaNs are treated as equal if they are in the same place and if `equal_nan=True`. Infs are treated as equal if they are in the same place and of the same sign in both arrays.\n",
|
||||
"\n",
|
||||
"【例】比较两个数组是否可以认为相等。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-7], [1.00001e10, 1e-8])\n",
|
||||
"print(x) # [ True False]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-7], [1.00001e10, 1e-8])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-8], [1.00001e10, 1e-9])\n",
|
||||
"print(x) # [ True True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-8], [1.00001e10, 1e-9])\n",
|
||||
"print(x) # True\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-8], [1.0001e10, 1e-9])\n",
|
||||
"print(x) # [False True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-8], [1.0001e10, 1e-9])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1.0, np.nan], [1.0, np.nan])\n",
|
||||
"print(x) # [ True False]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1.0, np.nan], [1.0, np.nan])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)\n",
|
||||
"print(x) # [ True True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)\n",
|
||||
"print(x) # True\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
851
IntroductionToNumpy/numpy/task04-2天-数学函数及逻辑函数/07. 数学函数.ipynb
Normal file
851
IntroductionToNumpy/numpy/task04-2天-数学函数及逻辑函数/07. 数学函数.ipynb
Normal file
@@ -0,0 +1,851 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 向量化和广播\n",
|
||||
"\n",
|
||||
"向量化和广播这两个概念是 numpy 内部实现的基础。有了向量化,编写代码时无需使用显式循环。这些循环实际上不能省略,只不过是在内部实现,被代码中的其他结构代替。向量化的应用使得代码更简洁,可读性更强,也可以说使用了向量化方法的代码看上去更“Pythonic”。\n",
|
||||
"\n",
|
||||
"广播(Broadcasting)机制描述了 numpy 如何在算术运算期间处理具有不同形状的数组,让较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。并不是所有的维度都要彼此兼容才符合广播机制的要求,但它们必须满足一定的条件。\n",
|
||||
"\n",
|
||||
"若两个数组的各维度兼容,也就是两个数组的每一维等长,或其中一个数组为 一维,那么广播机制就适用。如果这两个条件不满足,numpy就会抛出异常,说两个数组不兼容。\n",
|
||||
"\n",
|
||||
"总结来说,广播的规则有三个:\n",
|
||||
"- 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1。\n",
|
||||
"- 如果shape维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;\n",
|
||||
"- 如果shape维度不匹配,但是没有任何一个维度是1,则匹配引发错误;\n",
|
||||
"\n",
|
||||
"【例】二维数组加一维数组\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4)\n",
|
||||
"y = np.ones((3, 4))\n",
|
||||
"print(x.shape) # (4,)\n",
|
||||
"print(y.shape) # (3, 4)\n",
|
||||
"\n",
|
||||
"print((x + y).shape) # (3, 4)\n",
|
||||
"print(x + y)\n",
|
||||
"# [[1. 2. 3. 4.]\n",
|
||||
"# [1. 2. 3. 4.]\n",
|
||||
"# [1. 2. 3. 4.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】两个数组均需要广播\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4).reshape(4, 1)\n",
|
||||
"y = np.ones(5)\n",
|
||||
"\n",
|
||||
"print(x.shape) # (4, 1)\n",
|
||||
"print(y.shape) # (5,)\n",
|
||||
"\n",
|
||||
"print((x + y).shape) # (4, 5)\n",
|
||||
"print(x + y)\n",
|
||||
"# [[1. 1. 1. 1. 1.]\n",
|
||||
"# [2. 2. 2. 2. 2.]\n",
|
||||
"# [3. 3. 3. 3. 3.]\n",
|
||||
"# [4. 4. 4. 4. 4.]]\n",
|
||||
"\n",
|
||||
"x = np.array([0.0, 10.0, 20.0, 30.0])\n",
|
||||
"y = np.array([1.0, 2.0, 3.0])\n",
|
||||
"z = x[:, np.newaxis] + y\n",
|
||||
"print(z)\n",
|
||||
"# [[ 1. 2. 3.]\n",
|
||||
"# [11. 12. 13.]\n",
|
||||
"# [21. 22. 23.]\n",
|
||||
"# [31. 32. 33.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】不匹配报错的例子\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(4)\n",
|
||||
"y = np.ones(5)\n",
|
||||
"\n",
|
||||
"print(x.shape) # (4,)\n",
|
||||
"print(y.shape) # (5,)\n",
|
||||
"\n",
|
||||
"print(x + y)\n",
|
||||
"# ValueError: operands could not be broadcast together with shapes (4,) (5,) \n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"# 数学函数\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 算数运算\n",
|
||||
"### numpy.add\n",
|
||||
"### numpy.subtract\n",
|
||||
"### numpy.multiply\n",
|
||||
"### numpy.divide\n",
|
||||
"### numpy.floor_divide\n",
|
||||
"### numpy.power\n",
|
||||
"- `numpy.add(x1, x2, *args, **kwargs)` Add arguments element-wise.\n",
|
||||
"- `numpy.subtract(x1, x2, *args, **kwargs)` Subtract arguments element-wise.\n",
|
||||
"- `numpy.multiply(x1, x2, *args, **kwargs)` Multiply arguments element-wise.\n",
|
||||
"- `numpy.divide(x1, x2, *args, **kwargs)` Returns a true division of the inputs, element-wise.\n",
|
||||
"- `numpy.floor_divide(x1, x2, *args, **kwargs)` Return the largest integer smaller or equal to the division of the inputs.\n",
|
||||
"- `numpy.power(x1, x2, *args, **kwargs)` First array elements raised to powers from second array, element-wise.\n",
|
||||
"\n",
|
||||
"在 numpy 中对以上函数进行了运算符的重载,且运算符为 **元素级**。也就是说,它们只用于位置相同的元素之间,所得到的运算结果组成一个新的数组。\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = x + 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.add(x, 1))\n",
|
||||
"# [2 3 4 5 6 7 8 9]\n",
|
||||
"\n",
|
||||
"y = x - 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.subtract(x, 1))\n",
|
||||
"# [0 1 2 3 4 5 6 7]\n",
|
||||
"\n",
|
||||
"y = x * 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.multiply(x, 2))\n",
|
||||
"# [ 2 4 6 8 10 12 14 16]\n",
|
||||
"\n",
|
||||
"y = x / 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.divide(x, 2))\n",
|
||||
"# [0.5 1. 1.5 2. 2.5 3. 3.5 4. ]\n",
|
||||
"\n",
|
||||
"y = x // 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.floor_divide(x, 2))\n",
|
||||
"# [0 1 1 2 2 3 3 4]\n",
|
||||
"\n",
|
||||
"y = x ** 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [ 1 4 9 16 25 36 49 64]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x + 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.add(x, 1))\n",
|
||||
"# [[12 13 14 15 16]\n",
|
||||
"# [17 18 19 20 21]\n",
|
||||
"# [22 23 24 25 26]\n",
|
||||
"# [27 28 29 30 31]\n",
|
||||
"# [32 33 34 35 36]]\n",
|
||||
"\n",
|
||||
"y = x - 1\n",
|
||||
"print(y)\n",
|
||||
"print(np.subtract(x, 1))\n",
|
||||
"# [[10 11 12 13 14]\n",
|
||||
"# [15 16 17 18 19]\n",
|
||||
"# [20 21 22 23 24]\n",
|
||||
"# [25 26 27 28 29]\n",
|
||||
"# [30 31 32 33 34]]\n",
|
||||
"\n",
|
||||
"y = x * 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.multiply(x, 2))\n",
|
||||
"# [[22 24 26 28 30]\n",
|
||||
"# [32 34 36 38 40]\n",
|
||||
"# [42 44 46 48 50]\n",
|
||||
"# [52 54 56 58 60]\n",
|
||||
"# [62 64 66 68 70]]\n",
|
||||
"\n",
|
||||
"y = x / 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.divide(x, 2))\n",
|
||||
"# [[ 5.5 6. 6.5 7. 7.5]\n",
|
||||
"# [ 8. 8.5 9. 9.5 10. ]\n",
|
||||
"# [10.5 11. 11.5 12. 12.5]\n",
|
||||
"# [13. 13.5 14. 14.5 15. ]\n",
|
||||
"# [15.5 16. 16.5 17. 17.5]]\n",
|
||||
"\n",
|
||||
"y = x // 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.floor_divide(x, 2))\n",
|
||||
"# [[ 5 6 6 7 7]\n",
|
||||
"# [ 8 8 9 9 10]\n",
|
||||
"# [10 11 11 12 12]\n",
|
||||
"# [13 13 14 14 15]\n",
|
||||
"# [15 16 16 17 17]]\n",
|
||||
"\n",
|
||||
"y = x ** 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.arange(1, 6)\n",
|
||||
"print(y)\n",
|
||||
"# [1 2 3 4 5]\n",
|
||||
"\n",
|
||||
"z = x + y\n",
|
||||
"print(z)\n",
|
||||
"print(np.add(x, y))\n",
|
||||
"# [[12 14 16 18 20]\n",
|
||||
"# [17 19 21 23 25]\n",
|
||||
"# [22 24 26 28 30]\n",
|
||||
"# [27 29 31 33 35]\n",
|
||||
"# [32 34 36 38 40]]\n",
|
||||
"\n",
|
||||
"z = x - y\n",
|
||||
"print(z)\n",
|
||||
"print(np.subtract(x, y))\n",
|
||||
"# [[10 10 10 10 10]\n",
|
||||
"# [15 15 15 15 15]\n",
|
||||
"# [20 20 20 20 20]\n",
|
||||
"# [25 25 25 25 25]\n",
|
||||
"# [30 30 30 30 30]]\n",
|
||||
"\n",
|
||||
"z = x * y\n",
|
||||
"print(z)\n",
|
||||
"print(np.multiply(x, y))\n",
|
||||
"# [[ 11 24 39 56 75]\n",
|
||||
"# [ 16 34 54 76 100]\n",
|
||||
"# [ 21 44 69 96 125]\n",
|
||||
"# [ 26 54 84 116 150]\n",
|
||||
"# [ 31 64 99 136 175]]\n",
|
||||
"\n",
|
||||
"z = x / y\n",
|
||||
"print(z)\n",
|
||||
"print(np.divide(x, y))\n",
|
||||
"# [[11. 6. 4.33333333 3.5 3. ]\n",
|
||||
"# [16. 8.5 6. 4.75 4. ]\n",
|
||||
"# [21. 11. 7.66666667 6. 5. ]\n",
|
||||
"# [26. 13.5 9.33333333 7.25 6. ]\n",
|
||||
"# [31. 16. 11. 8.5 7. ]]\n",
|
||||
"\n",
|
||||
"z = x // y\n",
|
||||
"print(z)\n",
|
||||
"print(np.floor_divide(x, y))\n",
|
||||
"# [[11 6 4 3 3]\n",
|
||||
"# [16 8 6 4 4]\n",
|
||||
"# [21 11 7 6 5]\n",
|
||||
"# [26 13 9 7 6]\n",
|
||||
"# [31 16 11 8 7]]\n",
|
||||
"\n",
|
||||
"z = x ** np.full([1, 5], 2)\n",
|
||||
"print(z)\n",
|
||||
"print(np.power(x, np.full([5, 5], 2)))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.arange(1, 26).reshape([5, 5])\n",
|
||||
"print(y)\n",
|
||||
"# [[ 1 2 3 4 5]\n",
|
||||
"# [ 6 7 8 9 10]\n",
|
||||
"# [11 12 13 14 15]\n",
|
||||
"# [16 17 18 19 20]\n",
|
||||
"# [21 22 23 24 25]]\n",
|
||||
"\n",
|
||||
"z = x + y\n",
|
||||
"print(z)\n",
|
||||
"print(np.add(x, y))\n",
|
||||
"# [[12 14 16 18 20]\n",
|
||||
"# [22 24 26 28 30]\n",
|
||||
"# [32 34 36 38 40]\n",
|
||||
"# [42 44 46 48 50]\n",
|
||||
"# [52 54 56 58 60]]\n",
|
||||
"\n",
|
||||
"z = x - y\n",
|
||||
"print(z)\n",
|
||||
"print(np.subtract(x, y))\n",
|
||||
"# [[10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]\n",
|
||||
"# [10 10 10 10 10]]\n",
|
||||
"\n",
|
||||
"z = x * y\n",
|
||||
"print(z)\n",
|
||||
"print(np.multiply(x, y))\n",
|
||||
"# [[ 11 24 39 56 75]\n",
|
||||
"# [ 96 119 144 171 200]\n",
|
||||
"# [231 264 299 336 375]\n",
|
||||
"# [416 459 504 551 600]\n",
|
||||
"# [651 704 759 816 875]]\n",
|
||||
"\n",
|
||||
"z = x / y\n",
|
||||
"print(z)\n",
|
||||
"print(np.divide(x, y))\n",
|
||||
"# [[11. 6. 4.33333333 3.5 3. ]\n",
|
||||
"# [ 2.66666667 2.42857143 2.25 2.11111111 2. ]\n",
|
||||
"# [ 1.90909091 1.83333333 1.76923077 1.71428571 1.66666667]\n",
|
||||
"# [ 1.625 1.58823529 1.55555556 1.52631579 1.5 ]\n",
|
||||
"# [ 1.47619048 1.45454545 1.43478261 1.41666667 1.4 ]]\n",
|
||||
"\n",
|
||||
"z = x // y\n",
|
||||
"print(z)\n",
|
||||
"print(np.floor_divide(x, y))\n",
|
||||
"# [[11 6 4 3 3]\n",
|
||||
"# [ 2 2 2 2 2]\n",
|
||||
"# [ 1 1 1 1 1]\n",
|
||||
"# [ 1 1 1 1 1]\n",
|
||||
"# [ 1 1 1 1 1]]\n",
|
||||
"\n",
|
||||
"z = x ** np.full([5, 5], 2)\n",
|
||||
"print(z)\n",
|
||||
"print(np.power(x, np.full([5, 5], 2)))\n",
|
||||
"# [[ 121 144 169 196 225]\n",
|
||||
"# [ 256 289 324 361 400]\n",
|
||||
"# [ 441 484 529 576 625]\n",
|
||||
"# [ 676 729 784 841 900]\n",
|
||||
"# [ 961 1024 1089 1156 1225]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### numpy.sqrt\n",
|
||||
"### numpy.square\n",
|
||||
"- `numpy.sqrt(x, *args, **kwargs)` Return the non-negative square-root of an array, element-wise.\n",
|
||||
"- `numpy.square(x, *args, **kwargs)` Return the element-wise square of the input.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(1, 5)\n",
|
||||
"print(x) # [1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.sqrt(x)\n",
|
||||
"print(y)\n",
|
||||
"# [1. 1.41421356 1.73205081 2. ]\n",
|
||||
"print(np.power(x, 0.5))\n",
|
||||
"# [1. 1.41421356 1.73205081 2. ]\n",
|
||||
"\n",
|
||||
"y = np.square(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 1 4 9 16]\n",
|
||||
"print(np.power(x, 2))\n",
|
||||
"# [ 1 4 9 16]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 三角函数\n",
|
||||
"\n",
|
||||
"### numpy.sin\n",
|
||||
"### numpy.cos\n",
|
||||
"### numpy.tan\n",
|
||||
"### numpy.arcsin\n",
|
||||
"### numpy.arccos\n",
|
||||
"### numpy.arctan\n",
|
||||
"\n",
|
||||
"- `numpy.sin(x, *args, **kwargs)` Trigonometric sine, element-wise.\n",
|
||||
"- `numpy.cos(x, *args, **kwargs)` Cosine element-wise.\n",
|
||||
"- `numpy.tan(x, *args, **kwargs)` Compute tangent element-wise.\n",
|
||||
"- `numpy.arcsin(x, *args, **kwargs)` Inverse sine, element-wise.\n",
|
||||
"- `numpy.arccos(x, *args, **kwargs)` Trigonometric inverse cosine, element-wise.\n",
|
||||
"- `numpy.arctan(x, *args, **kwargs)` Trigonometric inverse tangent, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"**通用函数**(universal function)通常叫作ufunc,它对数组中的各个元素逐一进行操作。这表明,通用函数分别处理输入数组的每个元素,生成的结果组成一个新的输出数组。输出数组的大小跟输入数组相同。\n",
|
||||
"\n",
|
||||
"三角函数等很多数学运算符合通用函数的定义,例如,计算平方根的`sqrt()`函数、用来取对数的`log()`函数和求正弦值的`sin()`函数。\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.linspace(start=0, stop=np.pi / 2, num=10)\n",
|
||||
"print(x)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.sin(x)\n",
|
||||
"print(y)\n",
|
||||
"# [0. 0.17364818 0.34202014 0.5 0.64278761 0.76604444\n",
|
||||
"# 0.8660254 0.93969262 0.98480775 1. ]\n",
|
||||
"\n",
|
||||
"z = np.arcsin(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.cos(x)\n",
|
||||
"print(y)\n",
|
||||
"# [1.00000000e+00 9.84807753e-01 9.39692621e-01 8.66025404e-01\n",
|
||||
"# 7.66044443e-01 6.42787610e-01 5.00000000e-01 3.42020143e-01\n",
|
||||
"# 1.73648178e-01 6.12323400e-17]\n",
|
||||
"\n",
|
||||
"z = np.arccos(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"\n",
|
||||
"y = np.tan(x)\n",
|
||||
"print(y)\n",
|
||||
"# [0.00000000e+00 1.76326981e-01 3.63970234e-01 5.77350269e-01\n",
|
||||
"# 8.39099631e-01 1.19175359e+00 1.73205081e+00 2.74747742e+00\n",
|
||||
"# 5.67128182e+00 1.63312394e+16]\n",
|
||||
"\n",
|
||||
"z = np.arctan(y)\n",
|
||||
"print(z)\n",
|
||||
"# [0. 0.17453293 0.34906585 0.52359878 0.6981317 0.87266463\n",
|
||||
"# 1.04719755 1.22173048 1.3962634 1.57079633]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 指数和对数\n",
|
||||
"### numpy.exp\n",
|
||||
"### numpy.log\n",
|
||||
"### numpy.exp2\n",
|
||||
"### numpy.log2\n",
|
||||
"### numpy.log10\n",
|
||||
"\n",
|
||||
"- `numpy.exp(x, *args, **kwargs)` Calculate the exponential of all elements in the input array.\n",
|
||||
"- `numpy.log(x, *args, **kwargs)` Natural logarithm, element-wise.\n",
|
||||
"- `numpy.exp2(x, *args, **kwargs)` Calculate `2**p` for all `p` in the input array.\n",
|
||||
"- `numpy.log2(x, *args, **kwargs)` Base-2 logarithm of `x`.\n",
|
||||
"- `numpy.log10(x, *args, **kwargs)` Return the base 10 logarithm of the input array, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】The natural logarithm `log` is the inverse of the exponential function, so that `log(exp(x)) = x`. The natural logarithm is logarithm in base `e`.\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(1, 5)\n",
|
||||
"print(x)\n",
|
||||
"# [1 2 3 4]\n",
|
||||
"y = np.exp(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 2.71828183 7.3890561 20.08553692 54.59815003]\n",
|
||||
"z = np.log(y)\n",
|
||||
"print(z)\n",
|
||||
"# [1. 2. 3. 4.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 加法函数、乘法函数\n",
|
||||
"### numpy.sum\n",
|
||||
"\n",
|
||||
"- `numpy.sum(a[, axis=None, dtype=None, out=None, …])` Sum of array elements over a given axis.\n",
|
||||
"\n",
|
||||
"通过不同的 `axis`,numpy 会沿着不同的方向进行操作:如果不设置,那么对所有的元素操作;如果`axis=0`,则沿着纵轴进行操作;`axis=1`,则沿着横轴进行操作。但这只是简单的二位数组,如果是多维的呢?可以总结为一句话:设`axis=i`,则 numpy 沿着第`i`个下标变化的方向进行操作。\n",
|
||||
"\n",
|
||||
"### numpy.cumsum\n",
|
||||
"\n",
|
||||
"- `numpy.cumsum(a, axis=None, dtype=None, out=None)` Return the cumulative sum of the elements along a given axis.\n",
|
||||
"\n",
|
||||
"**聚合函数** 是指对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因而,求数组所有元素之和的函数就是聚合函数。`ndarray`类实现了多个这样的函数。\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上的数组元素的总和。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.sum(x)\n",
|
||||
"print(y) # 575\n",
|
||||
"\n",
|
||||
"y = np.sum(x, axis=0)\n",
|
||||
"print(y) # [105 110 115 120 125]\n",
|
||||
"\n",
|
||||
"y = np.sum(x, axis=1)\n",
|
||||
"print(y) # [ 65 90 115 140 165]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上的数组元素的累加和。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.cumsum(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 11 23 36 50 65 81 98 116 135 155 176 198 221 245 270 296 323 351\n",
|
||||
"# 380 410 441 473 506 540 575]\n",
|
||||
"\n",
|
||||
"y = np.cumsum(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 12 13 14 15]\n",
|
||||
"# [ 27 29 31 33 35]\n",
|
||||
"# [ 48 51 54 57 60]\n",
|
||||
"# [ 74 78 82 86 90]\n",
|
||||
"# [105 110 115 120 125]]\n",
|
||||
"\n",
|
||||
"y = np.cumsum(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 23 36 50 65]\n",
|
||||
"# [ 16 33 51 70 90]\n",
|
||||
"# [ 21 43 66 90 115]\n",
|
||||
"# [ 26 53 81 110 140]\n",
|
||||
"# [ 31 63 96 130 165]]\n",
|
||||
"```\n",
|
||||
"### numpy.prod 乘积\n",
|
||||
"- `numpy.prod(a[, axis=None, dtype=None, out=None, …])` Return the product of array elements over a given axis.\n",
|
||||
"\n",
|
||||
"### numpy.cumprod 累乘\n",
|
||||
"- `numpy.cumprod(a, axis=None, dtype=None, out=None)` Return the cumulative product of elements along a given axis.\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上数组元素的乘积。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.prod(x)\n",
|
||||
"print(y) # 788529152\n",
|
||||
"\n",
|
||||
"y = np.prod(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [2978976 3877632 4972968 6294624 7875000]\n",
|
||||
"\n",
|
||||
"y = np.prod(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [ 360360 1860480 6375600 17100720 38955840]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】返回给定轴上数组元素的累乘。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.cumprod(x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 11 132 1716 24024 360360 5765760\n",
|
||||
"# 98017920 1764322560 -837609728 427674624 391232512 17180672\n",
|
||||
"# 395155456 893796352 870072320 1147043840 905412608 -418250752\n",
|
||||
"# 755630080 1194065920 -1638662144 -897581056 444596224 -2063597568\n",
|
||||
"# 788529152]\n",
|
||||
"\n",
|
||||
"y = np.cumprod(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 12 13 14 15]\n",
|
||||
"# [ 176 204 234 266 300]\n",
|
||||
"# [ 3696 4488 5382 6384 7500]\n",
|
||||
"# [ 96096 121176 150696 185136 225000]\n",
|
||||
"# [2978976 3877632 4972968 6294624 7875000]]\n",
|
||||
"\n",
|
||||
"y = np.cumprod(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 11 132 1716 24024 360360]\n",
|
||||
"# [ 16 272 4896 93024 1860480]\n",
|
||||
"# [ 21 462 10626 255024 6375600]\n",
|
||||
"# [ 26 702 19656 570024 17100720]\n",
|
||||
"# [ 31 992 32736 1113024 38955840]]\n",
|
||||
"```\n",
|
||||
"### numpy.diff 差值\n",
|
||||
"\n",
|
||||
"- `numpy.diff(a, n=1, axis=-1, prepend=np._NoValue, append=np._NoValue)` Calculate the n-th discrete difference along the given axis.\n",
|
||||
" - a:输入矩阵\n",
|
||||
" - n:可选,代表要执行几次差值\n",
|
||||
" - axis:默认是最后一个\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The first difference is given by `out[i] = a[i+1] - a[i]` along the given axis, higher differences are calculated by using `diff` recursively.\n",
|
||||
"\n",
|
||||
"【例】沿着指定轴计算第N维的离散差值。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"A = np.arange(2, 14).reshape((3, 4))\n",
|
||||
"A[1, 1] = 8\n",
|
||||
"print(A)\n",
|
||||
"# [[ 2 3 4 5]\n",
|
||||
"# [ 6 8 8 9]\n",
|
||||
"# [10 11 12 13]]\n",
|
||||
"print(np.diff(A))\n",
|
||||
"# [[1 1 1]\n",
|
||||
"# [2 0 1]\n",
|
||||
"# [1 1 1]]\n",
|
||||
"print(np.diff(A, axis=0))\n",
|
||||
"# [[4 5 4 4]\n",
|
||||
"# [4 3 4 4]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 四舍五入\n",
|
||||
"### numpy.around 舍入\n",
|
||||
"\n",
|
||||
"- `numpy.around(a, decimals=0, out=None)` Evenly round to the given number of decimals.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】将数组舍入到给定的小数位数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(3, 3) * 10\n",
|
||||
"print(x)\n",
|
||||
"# [[6.59144457 3.78566113 8.15321227]\n",
|
||||
"# [1.68241475 3.78753332 7.68886328]\n",
|
||||
"# [2.84255822 9.58106727 7.86678037]]\n",
|
||||
"\n",
|
||||
"y = np.around(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 7. 4. 8.]\n",
|
||||
"# [ 2. 4. 8.]\n",
|
||||
"# [ 3. 10. 8.]]\n",
|
||||
"\n",
|
||||
"y = np.around(x, decimals=2)\n",
|
||||
"print(y)\n",
|
||||
"# [[6.59 3.79 8.15]\n",
|
||||
"# [1.68 3.79 7.69]\n",
|
||||
"# [2.84 9.58 7.87]]\n",
|
||||
"```\n",
|
||||
"### numpy.ceil 上限\n",
|
||||
"### numpy.floor 下限\n",
|
||||
"\n",
|
||||
"- `numpy.ceil(x, *args, **kwargs)` Return the ceiling of the input, element-wise.\n",
|
||||
"- `numpy.floor(x, *args, **kwargs)` Return the floor of the input, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.rand(3, 3) * 10\n",
|
||||
"print(x)\n",
|
||||
"# [[0.67847795 1.33073923 4.53920122]\n",
|
||||
"# [7.55724676 5.88854047 2.65502046]\n",
|
||||
"# [8.67640444 8.80110812 5.97528726]]\n",
|
||||
"\n",
|
||||
"y = np.ceil(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[1. 2. 5.]\n",
|
||||
"# [8. 6. 3.]\n",
|
||||
"# [9. 9. 6.]]\n",
|
||||
"\n",
|
||||
"y = np.floor(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[0. 1. 4.]\n",
|
||||
"# [7. 5. 2.]\n",
|
||||
"# [8. 8. 5.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 杂项\n",
|
||||
"\n",
|
||||
"### numpy.clip 裁剪\n",
|
||||
"\n",
|
||||
"- `numpy.clip(a, a_min, a_max, out=None, **kwargs):` Clip (limit) the values in an array.\n",
|
||||
"\n",
|
||||
"Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of `[0, 1]` is specified, values smaller than 0 become 0, and values larger than 1 become 1.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】裁剪(限制)数组中的值。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.clip(x, a_min=20, a_max=30)\n",
|
||||
"print(y)\n",
|
||||
"# [[20 20 20 20 20]\n",
|
||||
"# [20 20 20 20 20]\n",
|
||||
"# [21 22 23 24 25]\n",
|
||||
"# [26 27 28 29 30]\n",
|
||||
"# [30 30 30 30 30]]\n",
|
||||
"```\n",
|
||||
"### numpy.absolute 绝对值\n",
|
||||
"### numpy.abs\n",
|
||||
"\n",
|
||||
"- `numpy.absolute(x, *args, **kwargs)` Calculate the absolute value element-wise. \n",
|
||||
"- `numpy.abs(x, *args, **kwargs)` is a shorthand for this function.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"# [-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.abs(x)\n",
|
||||
"print(y)\n",
|
||||
"# [5 4 3 2 1 0 1 2 3 4]\n",
|
||||
"\n",
|
||||
"y = np.absolute(x)\n",
|
||||
"print(y)\n",
|
||||
"# [5 4 3 2 1 0 1 2 3 4]\n",
|
||||
"```\n",
|
||||
"### numpy.sign 返回数字符号的逐元素指示\n",
|
||||
"- `numpy.sign(x, *args, **kwargs)` Returns an element-wise indication of the sign of a number.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"#[-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"print(np.sign(x))\n",
|
||||
"#[-1 -1 -1 -1 -1 0 1 1 1 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"- https://mp.weixin.qq.com/s/RWsGvvmw4ptf7d8zPIDEJw\n",
|
||||
"- https://blog.csdn.net/hanshuobest/article/details/78558826?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-08-30T17:00:33.199734Z",
|
||||
"start_time": "2020-08-30T17:00:33.194782Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[-5 -4 -3 -2 -1 0 1 2 3 4]\n",
|
||||
"[-1 -1 -1 -1 -1 0 1 1 1 1]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"x = np.arange(-5, 5)\n",
|
||||
"print(x)\n",
|
||||
"print(np.sign(x))"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
516
IntroductionToNumpy/numpy/task04-2天-数学函数及逻辑函数/08. 逻辑函数.ipynb
Normal file
516
IntroductionToNumpy/numpy/task04-2天-数学函数及逻辑函数/08. 逻辑函数.ipynb
Normal file
@@ -0,0 +1,516 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 逻辑函数\n",
|
||||
"\n",
|
||||
"## 真值测试\n",
|
||||
"### numpy.all\n",
|
||||
"### numpy.any\n",
|
||||
"\n",
|
||||
"- `numpy.all(a, axis=None, out=None, keepdims=np._NoValue)` Test whether all array elements along a given axis evaluate to True.\n",
|
||||
"- `numpy.any(a, axis=None, out=None, keepdims=np._NoValue)` Test whether any array element along a given axis evaluates to True.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([0, 4, 5])\n",
|
||||
"b = np.copy(a)\n",
|
||||
"print(np.all(a == b)) # True\n",
|
||||
"print(np.any(a == b)) # True\n",
|
||||
"\n",
|
||||
"b[0] = 1\n",
|
||||
"print(np.all(a == b)) # False\n",
|
||||
"print(np.any(a == b)) # True\n",
|
||||
"\n",
|
||||
"print(np.all([1.0, np.nan])) # True\n",
|
||||
"print(np.any([1.0, np.nan])) # True\n",
|
||||
"\n",
|
||||
"a = np.eye(3)\n",
|
||||
"print(np.all(a, axis=0)) # [False False False]\n",
|
||||
"print(np.any(a, axis=0)) # [ True True True]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 数组内容\n",
|
||||
"### numpy.isnan\n",
|
||||
"\n",
|
||||
"- `numpy.isnan(x, *args, **kwargs)` Test element-wise for NaN and return result as a boolean array.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"a=np.array([1,2,np.nan])\n",
|
||||
"print(np.isnan(a))\n",
|
||||
"#[False False True]\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 逻辑运算\n",
|
||||
"### numpy.logical_not\n",
|
||||
"### numpy.logical_and\n",
|
||||
"### numpy.logical_or\n",
|
||||
"### numpy.logical_xor\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.logical_not(x, *args, **kwargs)`Compute the truth value of NOT x element-wise.\n",
|
||||
"- `numpy.logical_and(x1, x2, *args, **kwargs)` Compute the truth value of x1 AND x2 element-wise.\n",
|
||||
"- `numpy.logical_or(x1, x2, *args, **kwargs)`Compute the truth value of x1 OR x2 element-wise.\n",
|
||||
"- `numpy.logical_xor(x1, x2, *args, **kwargs)`Compute the truth value of x1 XOR x2, element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"【例】计算非x元素的真值。\n",
|
||||
"\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"print(np.logical_not(3)) \n",
|
||||
"# False\n",
|
||||
"print(np.logical_not([True, False, 0, 1]))\n",
|
||||
"# [False True True False]\n",
|
||||
"\n",
|
||||
"x = np.arange(5)\n",
|
||||
"print(np.logical_not(x < 3))\n",
|
||||
"# [False False False True True]\n",
|
||||
"\n",
|
||||
"【例】计算x1 AND x2元素的真值。\n",
|
||||
"\n",
|
||||
"print(np.logical_and(True, False)) \n",
|
||||
"# False\n",
|
||||
"print(np.logical_and([True, False], [True, False]))\n",
|
||||
"# [ True False]\n",
|
||||
"print(np.logical_and(x > 1, x < 4))\n",
|
||||
"# [False False True True False]\n",
|
||||
"\n",
|
||||
"【例】逐元素计算x1 OR x2的真值。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"print(np.logical_or(True, False))\n",
|
||||
"# True\n",
|
||||
"print(np.logical_or([True, False], [False, False]))\n",
|
||||
"# [ True False]\n",
|
||||
"print(np.logical_or(x < 1, x > 3))\n",
|
||||
"# [ True False False False True]\n",
|
||||
"\n",
|
||||
"【例】计算x1 XOR x2的真值,按元素计算。\n",
|
||||
"\n",
|
||||
"print(np.logical_xor(True, False))\n",
|
||||
"# True\n",
|
||||
"print(np.logical_xor([True, True, False, False], [True, False, True, False]))\n",
|
||||
"# [False True True False]\n",
|
||||
"print(np.logical_xor(x < 1, x > 3))\n",
|
||||
"# [ True False False False True]\n",
|
||||
"print(np.logical_xor(0, np.eye(2)))\n",
|
||||
"# [[ True False]\n",
|
||||
"# [False True]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## 对照\n",
|
||||
"### numpy.greater\n",
|
||||
"### numpy.greater_equal\n",
|
||||
"### numpy.equal\n",
|
||||
"### numpy.not_equal\n",
|
||||
"### numpy.less\n",
|
||||
"### numpy.less_equal\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.greater(x1, x2, *args, **kwargs)` Return the truth value of (x1 > x2) element-wise.\n",
|
||||
"- `numpy.greater_equal(x1, x2, *args, **kwargs)` Return the truth value of (x1 >= x2) element-wise.\n",
|
||||
"- `numpy.equal(x1, x2, *args, **kwargs)` Return (x1 == x2) element-wise.\n",
|
||||
"- `numpy.not_equal(x1, x2, *args, **kwargs)` Return (x1 != x2) element-wise.\n",
|
||||
"- `numpy.less(x1, x2, *args, **kwargs)` Return the truth value of (x1 < x2) element-wise.\n",
|
||||
"- `numpy.less_equal(x1, x2, *args, **kwargs)` Return the truth value of (x1 =< x2) element-wise.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】numpy对以上对照函数进行了运算符的重载。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"\n",
|
||||
"y = x > 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater(x, 2))\n",
|
||||
"# [False False True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x >= 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater_equal(x, 2))\n",
|
||||
"# [False True True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x == 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.equal(x, 2))\n",
|
||||
"# [False True False False False False False False]\n",
|
||||
"\n",
|
||||
"y = x != 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.not_equal(x, 2))\n",
|
||||
"# [ True False True True True True True True]\n",
|
||||
"\n",
|
||||
"y = x < 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.less(x, 2))\n",
|
||||
"# [ True False False False False False False False]\n",
|
||||
"\n",
|
||||
"y = x <= 2\n",
|
||||
"print(y)\n",
|
||||
"print(np.less_equal(x, 2))\n",
|
||||
"# [ True True False False False False False False]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = x > 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"y = x >= 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.greater_equal(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"y = x == 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.equal(x, 20))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"y = x != 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.not_equal(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"y = x < 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.less(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"y = x <= 20\n",
|
||||
"print(y)\n",
|
||||
"print(np.less_equal(x, 20))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200611)\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"y = np.random.randint(10, 40, [5, 5])\n",
|
||||
"print(y)\n",
|
||||
"# [[32 28 31 33 37]\n",
|
||||
"# [23 37 37 30 29]\n",
|
||||
"# [32 24 10 33 15]\n",
|
||||
"# [27 17 10 36 16]\n",
|
||||
"# [25 32 23 39 34]]\n",
|
||||
"\n",
|
||||
"z = x > y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False True False True]\n",
|
||||
"# [False True True False True]\n",
|
||||
"# [ True False True False True]]\n",
|
||||
"\n",
|
||||
"z = x >= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater_equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False True False True]\n",
|
||||
"# [False True True False True]\n",
|
||||
"# [ True True True False True]]\n",
|
||||
"\n",
|
||||
"z = x == y\n",
|
||||
"print(z)\n",
|
||||
"print(np.equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False True False False False]]\n",
|
||||
"\n",
|
||||
"z = x != y\n",
|
||||
"print(z)\n",
|
||||
"print(np.not_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True False True True True]]\n",
|
||||
"\n",
|
||||
"z = x < y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True False True False]\n",
|
||||
"# [ True False False True False]\n",
|
||||
"# [False False False True False]]\n",
|
||||
"\n",
|
||||
"z = x <= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True False True False]\n",
|
||||
"# [ True False False True False]\n",
|
||||
"# [False True False True False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】注意 numpy 的广播规则。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"\n",
|
||||
"np.random.seed(20200611)\n",
|
||||
"y = np.random.randint(10, 50, 5)\n",
|
||||
"\n",
|
||||
"print(y)\n",
|
||||
"# [32 37 30 24 10]\n",
|
||||
"\n",
|
||||
"z = x > y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater(x, y))\n",
|
||||
"# [[False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False True True True]]\n",
|
||||
"\n",
|
||||
"z = x >= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.greater_equal(x, y))\n",
|
||||
"# [[False False False False True]\n",
|
||||
"# [False False False False True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False False True True]\n",
|
||||
"# [False False True True True]]\n",
|
||||
"\n",
|
||||
"z = x == y\n",
|
||||
"print(z)\n",
|
||||
"print(np.equal(x, y))\n",
|
||||
"# [[False False False False False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False True False]\n",
|
||||
"# [False False False False False]\n",
|
||||
"# [False False False False False]]\n",
|
||||
"\n",
|
||||
"z = x != y\n",
|
||||
"print(z)\n",
|
||||
"print(np.not_equal(x, y))\n",
|
||||
"# [[ True True True True True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True False True]\n",
|
||||
"# [ True True True True True]\n",
|
||||
"# [ True True True True True]]\n",
|
||||
"\n",
|
||||
"z = x < y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less(x, y))\n",
|
||||
"# [[ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True False False False]]\n",
|
||||
"\n",
|
||||
"z = x <= y\n",
|
||||
"print(z)\n",
|
||||
"print(np.less_equal(x, y))\n",
|
||||
"# [[ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True True False]\n",
|
||||
"# [ True True True False False]\n",
|
||||
"# [ True True False False False]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### numpy.isclose\n",
|
||||
"### numpy.allclose\n",
|
||||
"- `numpy.isclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)` Returns a boolean array where two arrays are element-wise equal within a tolerance.\n",
|
||||
"- `numpy.allclose(a, b, rtol=1.e-5, atol=1.e-8, equal_nan=False)` Returns True if two arrays are element-wise equal within a tolerance. \n",
|
||||
"\n",
|
||||
"`numpy.allclose()` 等价于 `numpy.all(isclose(a, b, rtol=rtol, atol=atol, equal_nan=equal_nan))`。\n",
|
||||
"\n",
|
||||
"The tolerance values are positive, typically very small numbers. The relative difference (`rtol * abs(b)`) and the absolute difference `atol` are added together to compare against the absolute difference between `a` and `b`.\n",
|
||||
"\n",
|
||||
"判断是否为True的计算依据:\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"np.absolute(a - b) <= (atol + rtol * absolute(b))\n",
|
||||
"\n",
|
||||
"- atol:float,绝对公差。\n",
|
||||
"- rtol:float,相对公差。\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"NaNs are treated as equal if they are in the same place and if `equal_nan=True`. Infs are treated as equal if they are in the same place and of the same sign in both arrays.\n",
|
||||
"\n",
|
||||
"【例】比较两个数组是否可以认为相等。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-7], [1.00001e10, 1e-8])\n",
|
||||
"print(x) # [ True False]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-7], [1.00001e10, 1e-8])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-8], [1.00001e10, 1e-9])\n",
|
||||
"print(x) # [ True True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-8], [1.00001e10, 1e-9])\n",
|
||||
"print(x) # True\n",
|
||||
"\n",
|
||||
"x = np.isclose([1e10, 1e-8], [1.0001e10, 1e-9])\n",
|
||||
"print(x) # [False True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1e10, 1e-8], [1.0001e10, 1e-9])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1.0, np.nan], [1.0, np.nan])\n",
|
||||
"print(x) # [ True False]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1.0, np.nan], [1.0, np.nan])\n",
|
||||
"print(x) # False\n",
|
||||
"\n",
|
||||
"x = np.isclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)\n",
|
||||
"print(x) # [ True True]\n",
|
||||
"\n",
|
||||
"x = np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)\n",
|
||||
"print(x) # True\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,715 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 数学函数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**将数组a中大于30的值替换为30,小于10的值替换为10。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.uniform(1, 50, 20)`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数、搜索】\n",
|
||||
"- 如何将大于给定值的所有值替换为给定的截止值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:08:51.850958Z",
|
||||
"start_time": "2020-09-06T03:08:51.759473Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[27.63 14.64 21.8 42.39 1.23 6.96 33.87 41.47 7.7 29.18 44.67 11.25\n",
|
||||
" 10.08 6.31 11.77 48.95 40.77 9.43 41. 14.43]\n",
|
||||
"[27.63 14.64 21.8 30. 10. 10. 30. 30. 10. 29.18 30. 11.25\n",
|
||||
" 10.08 10. 11.77 30. 30. 10. 30. 14.43]\n",
|
||||
"[27.63 14.64 21.8 30. 10. 10. 30. 30. 10. 29.18 30. 11.25\n",
|
||||
" 10.08 10. 11.77 30. 30. 10. 30. 14.43]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.set_printoptions(precision=2)\n",
|
||||
"np.random.seed(100)\n",
|
||||
"a = np.random.uniform(1, 50, 20)\n",
|
||||
"print(a)\n",
|
||||
"# [27.63 14.64 21.8 42.39 1.23 6.96 33.87 41.47 7.7 29.18 44.67 11.25\n",
|
||||
"# 10.08 6.31 11.77 48.95 40.77 9.43 41. 14.43]\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"b = np.clip(a, a_min=10, a_max=30)\n",
|
||||
"print(b)\n",
|
||||
"# [27.63 14.64 21.8 30. 10. 10. 30. 30. 10. 29.18 30. 11.25\n",
|
||||
"# 10.08 10. 11.77 30. 30. 10. 30. 14.43]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"b = np.where(a < 10, 10, a)\n",
|
||||
"b = np.where(b > 30, 30, b)\n",
|
||||
"print(b)\n",
|
||||
"# [27.63 14.64 21.8 30. 10. 10. 30. 30. 10. 29.18 30. 11.25\n",
|
||||
"# 10.08 10. 11.77 30. 30. 10. 30. 14.43]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:21:06.830747Z",
|
||||
"start_time": "2020-09-06T03:21:06.825756Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"\n",
|
||||
"**找到一个一维数字数组a中的所有峰值。峰顶是两边被较小数值包围的点。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 3, 7, 1, 2, 6, 0, 1])`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数、搜索】\n",
|
||||
"- 如何在一维数组中找到所有的局部极大值(或峰值)?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:21:25.424045Z",
|
||||
"start_time": "2020-09-06T03:21:25.417035Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 2 4 -6 1 4 -6 1]\n",
|
||||
"[ 1 1 -1 1 1 -1 1]\n",
|
||||
"[ 0 -2 2 0 -2 2]\n",
|
||||
"[2 5]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 3, 7, 1, 2, 6, 0, 1])\n",
|
||||
"b1 = np.diff(a)\n",
|
||||
"b2 = np.sign(b1)\n",
|
||||
"b3 = np.diff(b2)\n",
|
||||
"\n",
|
||||
"print(b1) # [ 2 4 -6 1 4 -6 1]\n",
|
||||
"print(b2) # [ 1 1 -1 1 1 -1 1]\n",
|
||||
"print(b3) # [ 0 -2 2 0 -2 2]\n",
|
||||
"index = np.where(np.equal(b3, -2))[0] + 1\n",
|
||||
"print(index) # [2 5]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**对于给定的一维数组,计算窗口大小为3的移动平均值。**\n",
|
||||
"\n",
|
||||
"- `z = np.random.randint(10, size=10)`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- 如何计算numpy数组的移动平均值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:23:59.067424Z",
|
||||
"start_time": "2020-09-06T03:23:59.062437Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[8 8 3 7 7 0 4 2 5 2]\n",
|
||||
"[6.33 6. 5.67 4.67 3.67 2. 3.67 3. ]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"z = np.random.randint(10, size=10)\n",
|
||||
"print(z)\n",
|
||||
"# [8 8 3 7 7 0 4 2 5 2]\n",
|
||||
"\n",
|
||||
"def MovingAverage(arr, n=3):\n",
|
||||
" a = np.cumsum(arr)\n",
|
||||
" a[n:] = a[n:] - a[:-n]\n",
|
||||
" return a[n - 1:] / n\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"r = MovingAverage(z, 3)\n",
|
||||
"print(np.around(r, 2))\n",
|
||||
"# [6.33 6. 5.67 4.67 3.67 2. 3.67 3. ]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:26:27.187954Z",
|
||||
"start_time": "2020-09-14T09:26:27.183972Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**对一个5x5的随机矩阵做归一化**\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- (提示: (x - min) / (max - min))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:26:59.520324Z",
|
||||
"start_time": "2020-09-14T09:26:59.515666Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0.65852707 0.23160203 0.9700425 0.43393441 0.36950354]\n",
|
||||
" [0.58585632 0.01877358 0. 0.27782335 0.89654906]\n",
|
||||
" [0.71307774 0.32030221 0.55187887 0.01411576 0.38903753]\n",
|
||||
" [0.05702349 0.40824762 0.23277188 0.74335934 0.72125366]\n",
|
||||
" [0.59816442 0.98727663 1. 0.86466287 0.42760849]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.random.random((5,5))\n",
|
||||
"Zmax, Zmin = Z.max(), Z.min()\n",
|
||||
"Z = (Z - Zmin)/(Zmax - Zmin)\n",
|
||||
"print(Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**用五种不同的方法去提取一个随机数组的整数部分**\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"\n",
|
||||
"- (提示: %, np.floor, np.ceil, astype, np.trunc)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:31:37.950320Z",
|
||||
"start_time": "2020-09-14T09:31:37.944304Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[8. 5. 5. 1. 2. 7. 0. 1. 5. 9.]\n",
|
||||
"[8. 5. 5. 1. 2. 7. 0. 1. 5. 9.]\n",
|
||||
"[8. 5. 5. 1. 2. 7. 0. 1. 5. 9.]\n",
|
||||
"[8 5 5 1 2 7 0 1 5 9]\n",
|
||||
"[8. 5. 5. 1. 2. 7. 0. 1. 5. 9.]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.random.uniform(0,10,10)\n",
|
||||
"\n",
|
||||
"print (Z - Z%1)\n",
|
||||
"print (np.floor(Z))\n",
|
||||
"print (np.ceil(Z)-1)\n",
|
||||
"print (Z.astype(int))\n",
|
||||
"print (np.trunc(Z))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**考虑一维数组Z,构建一个二维数组,其第一行为(Z [0],Z [1],Z [2]),随后的每一行都移位1(最后一行应为(Z [ -3],Z [-2],Z [-1])**\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"\n",
|
||||
"- (提示np.lib.stride_tricks)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"image.png": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKcAAAC9CAYAAADWW20RAAAOCElEQVR4Ae2da3LkKgyFvcZUzYZSvZXOUjoLyY8sgynwi4cEAmyjtM+tuhUbgwyHr2UMaDwZ/AcFlCowKa0XqgUFDOAEBGoVAJxquwYVA5xgQK0CgFNt16Bih8P5+/Vhpmna//98JSpL8iSF1Cb8muc/r73TZD6+ftXW9i9V7AQ4H+b5k5fg96ucJ29B8dXvB+A8qHt0wvnzNB+b932Y1PfWtb73xxB7+qxnBJx1nZPJrRDOl3n4j8bvh5mmFkBnO/MQ46PozTmNHJj+0GT54bCAAk5Oyup0dXA6GP49zT5qm8d0LAzFJltIW+Gc7/34Dm+SAOtfBpy+Gl3HyuCkQUyBrWlzP5yT7zmNMYCzRv/2vMrgnB/FsacyzY92K0wPnLSwr8/JJHVcs8Jzrkp0/9UF5zKeSzpeE5y2jsGwI+oDwBkJ0n4KOKu0e5lHDkxrC3BWKZrLrAtO9wgmHpkqPKcdHghmDQBnjreqa8rg1PZCtGopBNNmB5yraN1/lcG5vAkHj04aWHnLe1+IaDBfX/50l1cbwOmJ0XeoDs757dpbn+56pBtjuJcsoW6vT+JRbm1G00ubOcC5SdF7oBBO2yTrrdbNFAQcolb7NlZbtZPxlI3ZFrsoADhFvSPJdAKc2JXEgivpEeTZFDgczs0yDqBApwKAs1NAFD9PAcB5nraw3KkA4OwUEMXPUwBwnqctLHcqADg7BUTx8xQYAqfbD7nNY04m3i95XnPPsDyvYPlBfZhKOkbnQXAiwO2Y7ntvK6rhvDQwLdPPdnPx7hkLq0xYIcooWXdJIZz+kmEBhExbk1CKZY299pFrwfTLzEOSzJIq4Mz0St0lhXCuDbCQtsI5jwPjHfUJsOutMn+d1ww2edC2NxOAc5Oi9+Ct4YxftFrgTAW2cGZ+NIAzlawx5U3hpNXIBqbRRZLUIuCAM9GsNeE+cJYC0woKzmNNwbQX4CwoKb98EzgFgWlSzdzmZzzWpXL15LsBnPbFKvN23aBe9tEOz9mgKF3kzeE8Hkwno/WeQZyTJy7g9MToO3xjOGkw2cA0UsdlaTKYSqKC8LzCgNMTo+9QL5xXB6aROs5w+pPwxYA5wEkq2ZKoEE7r8fzlQnuceQEhW03ZKASmkXZs4uI9tzoV6gI4WSVrLwyCsxwEV9uQcfljeMPlznH1+vt3HgLn35cNLbhCAcB5hcq4R5MCgLNJNhS6QgHAeYXKuEeTAoCzSTYUukIBwHmFyrhHkwJD4Nx2+Kxzh9EKTFNLhhXCVNJZ0g+CEwFuZ3XoO9lVCWfsWYPlwwr1qwLThHbjmKKkGFaIEklaE9TBmWxHuyowTaKg28tZWAECnBIlRXmUwTmP34YEphXl2seWWU8OOItKSjOohHNIYFpBMevRP75e7vPVgLMg1kGXlcFJt+qSwDT61nPqFn80e0/AmRPruGv64dzAaGv09nLVPF1lgVzDPABnWy+0lVIO54WBaYx+Fu59DAw4GZlOSVYMJx1m0aNCMhNQNPYyj8DjAs6iZAdmUArn8WA6zXKBaZSoy9TR/o94hTv0d4/qFcbbuidG36FCOGkwTw9ME+kIzymS6aBM6uCs/mIaKQQBUWfA3Hwbwm58f3jOWJHmc2VwDgxMK0i4vfWvm1W4oDvAWVBSfnkQnAhwk3fRfXMOgfO+cqPlNQoAzhq1kPdSBQDnpXLjZjUKAM4atZD3UgUA56Vy42Y1CgDOGrWQ91IFhsCZzBkG69eXtv+Am80T8/4SZ3ZL3QF3vIuJQXAiwO0ugPW0UyWcQwLTOBWXZU/fM9pj1jtihYhTsjpdHZxxdOM8BFg3+1a3by4gCUzjTP88zfObu0ikA05ClLYklXCGMUTzmI7cniZq8z4mZL1dzg7gzKlz6jV1cKattXAV/jXhtNCWYj2vKDBtKxEdfD+8nfDRNeoUnpNSpSlNPZzusd76Nr/FH83es8lzfj/N8yfcLZW1AzibQKQKqYVzm25qBdP9W+7rWLUHzoeZgu8YzaCywwzASXHWlKYWzq017mWm/rFu4d4B6oBzq8h+kPXmgHMXqvNIP5z2exZfHyZ8SSq1uiEwrWTSv56LRQKcvlJdx38CTpODgWr+MnUUz02u57tHpQr7abPHTX4YufoATl/ArmNlcNIwOM/Jfc5P1PzWxzo9vsx6csAp6hFJJpVwBm/DVwWmMWpZENP6ZMbAgJNRsj5ZGZy2AYv3LAWSCdvqvNxmq+VrcMuY17ORHRYATmHPlLMNghMBbuWuQY4hcEJ2KCBRAHBKVEKeIQoAziGy46YSBQCnRCXkGaIA4BwiO24qUQBwSlRCniEKDIEzmXts3nk0RLPopvG8bCaEIyqJ07wCg+BEgFu+W3DVKqAezjimSNxttYFpBcNB0F1unR8rRAUl5Zd1w7nsLgrWtqVtq439Ye3Gm0bmzSBsnQAnq2TtBcVw7mM5FoRca4+C0/5AasbEgDPXK1XX1MI57wYSfDGNa25tYBppJ/aaZKYwEXCGenSc6YRzRGAaKeK+nzMYc+Y8KeAklWxJVAin9VYDAtMo9ZaXqo9/FfFIgJNSsilNHZz2cb7vl2x4rGZkcPOrOa8Xl13h/PoNryBMI9TjpDNlcA4MTKMEXuDcfyxLJpe+eveoIDxnJEj7qS44l6mjNRAt/ptAwrZ7edOPvWTO45G29jFncBlwBnKcdaILzqSVrY91Gqrqx7oxxr0I1UAOz5n0YmvCm8I5x/0E86PO22UC0zgFl0f7bmv+wbBeHHBySlanq4XTeTkvqGzivpiWaXJsgwUqY8NdWgBdhxlZO4CzpKb4+iA4EeAm7qEbZxwC5431RtMrFACcFWIh67UKAM5r9cbdKhQAnBViIeu1CgDOa/XG3SoUAJwVYiHrtQoMgTOef6zazHutPoK7LUul3pzsPmEvKI4srAKD4ESAG9sjuLApoA/OaDVmXZVp9UbBJuFcYNomSXiQePnNQ2JXUqjU8Wcq4az6YhqrSbxppBCYxth5fRLr8bkQECxfMkrWJ78vnLWBaaR2v+b59Yqu/Jrn59NE24/3PIBz16LzSB+cOa8kbmzsNcUFyxlL9QOcZQ2FORTCWfnFNLKh+37OYMwZ78sky+YSC17TFgWcOQGrrimEs/KLaVRz1z2YNYFplJ04TQKeJE9sF+ekAvrgJKrp3phrvN4KZ01gGnHfMMkOFYiXozATPGesR8f5n4Cz+iNZC5zJpmCXzkwBlUS0ZSVTUfCcJSXF15XBuay2xF7yisC0gmTOewPOgkrHXlYG5/4i4zez+rHeEpjm35A4di9WgJNQ5rwkZXAODEzLarx4dMCZVenoi+rgtA2MlwyTsaNUhWXsuS6BNttZPTHglCp/SL5BcCLA7ZDee3MjQ+B8c03RvIMUAJwHCQkzxysAOI/XFBYPUgBwHiQkzByvAOA8XlNYPEgBwHmQkDBzvAJD4IznMRHgdnzHvoPFQXAiwO0d4Dm7DWrhDDYJS1ZmIqUS71wKTIvK+6exrWywHXYl+dJ1HSuEMw6xuCgwjZHRgRn8OOL6RQUBZyRI+6k+OEcFppEaWhCJDca5LXyAk1SyJVEZnAWv1NLCtUwpMG3NF/yd65NsGLEbSuI9p2s5wLkq0f1XGZz7fs5gzMmBIG6+IDCNs2W9ZPBPfjPedC0POFcluv/qgnPZ4lb1xTSJBL3ABFvviMe8X4fee/m2bn6sE84RgWksCC/zWF+IVkjXc6oM4KRUaUpTCSc5xptODkwj5bOP8PS+bsjBDTUAJ6lkS6IuOM0+5gwa4zxWCkmQhzlJp4KYjFSyvS/lJbl0awNwUko2pSmDs+GLaYVmiwPTKDvcjwJwUmodnqYOTuOAmMy+CsNM54ikmMtOlPcTlad+LLPNvX6RIXjOSJD2U31w2rYsgF4amJbRMJjWmvwfDlEIcBKitCUNghMBbm3dda9SQ+C8l8RobasCgLNVOZQ7XQHAebrEuEGrAoCzVTmUO10BwHm6xLhBqwKAs1U5lDtdgSFwxmEP7x/gtiwGbKEihbnS07v9b9xgEJw3D3DDRL3o16EOzsSrbt6mfuNHbItdcixIFdo5YD8n4CwoPl9WB2f1F9OYZjqggjX1wpq41I5bWs0AKgFPkoepz52SlcHZ8MU0srcsiARAucA00o7dwpfa6d7PCThJteNEZXDG1Zv3Ryabj4lsYdLsJZNy1utxm4RDA/OZ85LEcCIHuQQ8SR6qPjdLUw7nhYFpVMfn4OR25kvAk+Sh6nOzNN1w9naig2sy89a79PFc7uvMYx1wluXrzKEYTmbcKG5wZWAaYzfeSW9ftB6f8ScQvcKSH5Qkj2fyrod64bReL3jbrukiC3Y6Vsy+yLDm5/HruvHZTkelMwFeYQl4kjyeybseqoUzC0CptziwufSSvei6hZydM5WAJ8kT3fOOp2rhjB+nVZ3jxpqp53ThH83eeK0BPQ5dr4qiLwHnJlfuQCmcy6O0A6T0ET7bZD0eo5Lz4NvLz1Kv3HSUBDxJHqY+d0pWCucS9dgBp+1EB+i2/Jl5FOd63Hnh9Y1fYEMCniRPrk43uTYIzrsFuIUvVfblqtaD34THoJlD4AxqgBMowCgAOBlhkDxeAcA5vg9QA0YBwMkIg+TxCgDO8X2AGjAKAE5GGCSPVwBwju8D1IBRAHAywiB5vAKAc3wfoAaMAoCTEQbJ4xUAnOP7ADVgFACcjDBIHq8A4BzfB6gBowDgZIRB8ngFAOf4PkANGAUAJyMMkscrADjH9wFqwCgAOBlhkDxeAcA5vg9QA0YBwMkIg+TxCgDO8X2AGjAK/AfMSn4HhuLGrAAAAABJRU5ErkJggg=="
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]-------->  "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T13:38:56.805424Z",
|
||||
"start_time": "2020-09-14T13:38:56.800436Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"4"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"np.arange(10).itemsize"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T13:32:50.080815Z",
|
||||
"start_time": "2020-09-14T13:32:49.737937Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0 1 2]\n",
|
||||
" [1 2 3]\n",
|
||||
" [2 3 4]\n",
|
||||
" [3 4 5]\n",
|
||||
" [4 5 6]\n",
|
||||
" [5 6 7]\n",
|
||||
" [6 7 8]\n",
|
||||
" [7 8 9]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from numpy.lib import stride_tricks\n",
|
||||
"def rolling(a, window):\n",
|
||||
" shape = (a.size - window + 1, window)\n",
|
||||
" strides = (a.itemsize, a.itemsize)\n",
|
||||
" return stride_tricks.as_strided(a, shape=shape, strides=strides)\n",
|
||||
"Z = rolling(np.arange(10), 3)\n",
|
||||
"print (Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**考虑两组点集P0和P1去描述一组线(二维)和一个点p,如何计算点p到每一条线 i (P0[i],P1[i])的距离?**\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- 提示 设P(x0,y0),直线方程为:Ax+By+C=0\n",
|
||||
"则P到直线的距离为:d=|Ax0+By0+C|/√(A²+B²)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 50,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T05:37:30.811695Z",
|
||||
"start_time": "2020-09-15T05:37:30.805709Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"def distance(P0,P1,p):\n",
|
||||
" A=-1/(P1[:,0]-P0[:,0])\n",
|
||||
" B=1/(P1[:,1]-P0[:,1])\n",
|
||||
" C=P0[:,0]/(P1[:,0]-P0[:,0])-P0[:,1]/(P1[:,1]-P0[:,1])\n",
|
||||
" return np.abs(A*p[:,0]+B*p[:,1]+C)/np.sqrt(A**2+B**2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 51,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T05:37:37.692332Z",
|
||||
"start_time": "2020-09-15T05:37:37.687379Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 2.41120585 7.05924485 5.94906338 3.89096895 7.68364539 14.01851392\n",
|
||||
" 4.28148124 2.29582076 6.19155339 15.55087594]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"P0 = np.random.uniform(-10,10,(10,2))\n",
|
||||
"P1 = np.random.uniform(-10,10,(10,2))\n",
|
||||
"p = np.random.uniform(-10,10,( 1,2))\n",
|
||||
"\n",
|
||||
"print (distance(P0, P1, p))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:33:06.525406Z",
|
||||
"start_time": "2020-09-06T02:33:06.520453Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## 逻辑函数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**获取a和b元素匹配的位置。**\n",
|
||||
"- `a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])`\n",
|
||||
"- `b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- 如何得到两个数组元素匹配的位置?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:53:59.537622Z",
|
||||
"start_time": "2020-09-06T02:53:59.531638Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"(array([1, 3, 5, 7], dtype=int64),)\n",
|
||||
"(array([1, 3, 5, 7], dtype=int64),)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])\n",
|
||||
"b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])\n",
|
||||
"mask = np.equal(a, b)\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"x = np.where(mask)\n",
|
||||
"print(x) # (array([1, 3, 5, 7], dtype=int64),)\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"x = np.nonzero(mask)\n",
|
||||
"print(x) # (array([1, 3, 5, 7], dtype=int64),)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:54:19.320517Z",
|
||||
"start_time": "2020-09-06T02:54:19.315496Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**获取5到10 之间的所有元素。**\n",
|
||||
"- `a = np.array([2, 6, 1, 9, 10, 3, 27])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- 如何从numpy数组中提取给定范围内的所有元素?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:55:11.162117Z",
|
||||
"start_time": "2020-09-06T02:55:11.156161Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 6 9 10]\n",
|
||||
"[ 6 9 10]\n",
|
||||
"[ 6 9 10]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([2, 6, 1, 9, 10, 3, 27])\n",
|
||||
"mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"x = np.where(mask)\n",
|
||||
"print(a[x]) # [ 6 9 10]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"x = np.nonzero(mask)\n",
|
||||
"print(a[x]) # [ 6 9 10]\n",
|
||||
"\n",
|
||||
"# 方法3\n",
|
||||
"x = a[np.logical_and(a >= 5, a <= 10)]\n",
|
||||
"print(x) # [ 6 9 10]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**对于两个随机数组A和B,检查他们是否相等**\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"\n",
|
||||
"- (提示: np.allclose, np.array_equal)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:35:57.408576Z",
|
||||
"start_time": "2020-09-14T09:35:57.404623Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"A = np.random.randint(0,2,5)\n",
|
||||
"B = np.random.randint(0,2,5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:35:58.285123Z",
|
||||
"start_time": "2020-09-14T09:35:58.280479Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"False\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"\n",
|
||||
"# Assuming identical shape of the arrays and a tolerance for the comparison of values\n",
|
||||
"equal = np.allclose(A,B)\n",
|
||||
"print(equal)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**何对布尔值取反,或者原位(in-place)改变浮点数的符号(sign)?**\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- (提示: np.logical_not, np.negative)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T14:05:59.290471Z",
|
||||
"start_time": "2020-09-14T14:05:59.284521Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0 1]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([1, 0])"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.array([0,1])\n",
|
||||
"print(Z)\n",
|
||||
"np.logical_not(Z, out=Z)\n",
|
||||
"# Z = np.random.uniform(-1.0,1.0,100)\n",
|
||||
"\n",
|
||||
"# np.negative(Z, out=Z)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T14:08:05.101330Z",
|
||||
"start_time": "2020-09-14T14:08:05.096343Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0.2 1.15]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([-0.2 , -1.15])"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.array([0.2,1.15])\n",
|
||||
"print(Z)\n",
|
||||
"np.negative(Z, out=Z)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "224.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 数学函数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将数组a中大于30的值替换为30,小于10的值替换为10。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.uniform(1, 50, 20)`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数、搜索】\n",
|
||||
"- 如何将大于给定值的所有值替换为给定的截止值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **找到一个一维数字数组a中的所有峰值。峰顶是两边被较小数值包围的点。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 3, 7, 1, 2, 6, 0, 1])`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数、搜索】\n",
|
||||
"- 如何在一维数组中找到所有的局部极大值(或峰值)?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **对于给定的一维数组,计算窗口大小为3的移动平均值。**\n",
|
||||
"\n",
|
||||
"- `z = np.random.randint(10, size=10)`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- 如何计算numpy数组的移动平均值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **对一个5x5的随机矩阵做归一化**\n",
|
||||
"\n",
|
||||
"-`Z = np.random.random((5,5))` \n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- (提示: (x - min) / (max - min))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **用五种不同的方法去提取一个随机数组的整数部分**\n",
|
||||
"\n",
|
||||
"- `Z = np.random.uniform(0,10,10) `\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"\n",
|
||||
"- (提示: %, np.floor, np.ceil, astype, np.trunc)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {
|
||||
"image.png": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKcAAAC9CAYAAADWW20RAAAOCElEQVR4Ae2da3LkKgyFvcZUzYZSvZXOUjoLyY8sgynwi4cEAmyjtM+tuhUbgwyHr2UMaDwZ/AcFlCowKa0XqgUFDOAEBGoVAJxquwYVA5xgQK0CgFNt16Bih8P5+/Vhpmna//98JSpL8iSF1Cb8muc/r73TZD6+ftXW9i9V7AQ4H+b5k5fg96ucJ29B8dXvB+A8qHt0wvnzNB+b932Y1PfWtb73xxB7+qxnBJx1nZPJrRDOl3n4j8bvh5mmFkBnO/MQ46PozTmNHJj+0GT54bCAAk5Oyup0dXA6GP49zT5qm8d0LAzFJltIW+Gc7/34Dm+SAOtfBpy+Gl3HyuCkQUyBrWlzP5yT7zmNMYCzRv/2vMrgnB/FsacyzY92K0wPnLSwr8/JJHVcs8Jzrkp0/9UF5zKeSzpeE5y2jsGwI+oDwBkJ0n4KOKu0e5lHDkxrC3BWKZrLrAtO9wgmHpkqPKcdHghmDQBnjreqa8rg1PZCtGopBNNmB5yraN1/lcG5vAkHj04aWHnLe1+IaDBfX/50l1cbwOmJ0XeoDs757dpbn+56pBtjuJcsoW6vT+JRbm1G00ubOcC5SdF7oBBO2yTrrdbNFAQcolb7NlZbtZPxlI3ZFrsoADhFvSPJdAKc2JXEgivpEeTZFDgczs0yDqBApwKAs1NAFD9PAcB5nraw3KkA4OwUEMXPUwBwnqctLHcqADg7BUTx8xQYAqfbD7nNY04m3i95XnPPsDyvYPlBfZhKOkbnQXAiwO2Y7ntvK6rhvDQwLdPPdnPx7hkLq0xYIcooWXdJIZz+kmEBhExbk1CKZY299pFrwfTLzEOSzJIq4Mz0St0lhXCuDbCQtsI5jwPjHfUJsOutMn+d1ww2edC2NxOAc5Oi9+Ct4YxftFrgTAW2cGZ+NIAzlawx5U3hpNXIBqbRRZLUIuCAM9GsNeE+cJYC0woKzmNNwbQX4CwoKb98EzgFgWlSzdzmZzzWpXL15LsBnPbFKvN23aBe9tEOz9mgKF3kzeE8Hkwno/WeQZyTJy7g9MToO3xjOGkw2cA0UsdlaTKYSqKC8LzCgNMTo+9QL5xXB6aROs5w+pPwxYA5wEkq2ZKoEE7r8fzlQnuceQEhW03ZKASmkXZs4uI9tzoV6gI4WSVrLwyCsxwEV9uQcfljeMPlznH1+vt3HgLn35cNLbhCAcB5hcq4R5MCgLNJNhS6QgHAeYXKuEeTAoCzSTYUukIBwHmFyrhHkwJD4Nx2+Kxzh9EKTFNLhhXCVNJZ0g+CEwFuZ3XoO9lVCWfsWYPlwwr1qwLThHbjmKKkGFaIEklaE9TBmWxHuyowTaKg28tZWAECnBIlRXmUwTmP34YEphXl2seWWU8OOItKSjOohHNIYFpBMevRP75e7vPVgLMg1kGXlcFJt+qSwDT61nPqFn80e0/AmRPruGv64dzAaGv09nLVPF1lgVzDPABnWy+0lVIO54WBaYx+Fu59DAw4GZlOSVYMJx1m0aNCMhNQNPYyj8DjAs6iZAdmUArn8WA6zXKBaZSoy9TR/o94hTv0d4/qFcbbuidG36FCOGkwTw9ME+kIzymS6aBM6uCs/mIaKQQBUWfA3Hwbwm58f3jOWJHmc2VwDgxMK0i4vfWvm1W4oDvAWVBSfnkQnAhwk3fRfXMOgfO+cqPlNQoAzhq1kPdSBQDnpXLjZjUKAM4atZD3UgUA56Vy42Y1CgDOGrWQ91IFhsCZzBkG69eXtv+Am80T8/4SZ3ZL3QF3vIuJQXAiwO0ugPW0UyWcQwLTOBWXZU/fM9pj1jtihYhTsjpdHZxxdOM8BFg3+1a3by4gCUzjTP88zfObu0ikA05ClLYklXCGMUTzmI7cniZq8z4mZL1dzg7gzKlz6jV1cKattXAV/jXhtNCWYj2vKDBtKxEdfD+8nfDRNeoUnpNSpSlNPZzusd76Nr/FH83es8lzfj/N8yfcLZW1AzibQKQKqYVzm25qBdP9W+7rWLUHzoeZgu8YzaCywwzASXHWlKYWzq017mWm/rFu4d4B6oBzq8h+kPXmgHMXqvNIP5z2exZfHyZ8SSq1uiEwrWTSv56LRQKcvlJdx38CTpODgWr+MnUUz02u57tHpQr7abPHTX4YufoATl/ArmNlcNIwOM/Jfc5P1PzWxzo9vsx6csAp6hFJJpVwBm/DVwWmMWpZENP6ZMbAgJNRsj5ZGZy2AYv3LAWSCdvqvNxmq+VrcMuY17ORHRYATmHPlLMNghMBbuWuQY4hcEJ2KCBRAHBKVEKeIQoAziGy46YSBQCnRCXkGaIA4BwiO24qUQBwSlRCniEKDIEzmXts3nk0RLPopvG8bCaEIyqJ07wCg+BEgFu+W3DVKqAezjimSNxttYFpBcNB0F1unR8rRAUl5Zd1w7nsLgrWtqVtq439Ye3Gm0bmzSBsnQAnq2TtBcVw7mM5FoRca4+C0/5AasbEgDPXK1XX1MI57wYSfDGNa25tYBppJ/aaZKYwEXCGenSc6YRzRGAaKeK+nzMYc+Y8KeAklWxJVAin9VYDAtMo9ZaXqo9/FfFIgJNSsilNHZz2cb7vl2x4rGZkcPOrOa8Xl13h/PoNryBMI9TjpDNlcA4MTKMEXuDcfyxLJpe+eveoIDxnJEj7qS44l6mjNRAt/ptAwrZ7edOPvWTO45G29jFncBlwBnKcdaILzqSVrY91Gqrqx7oxxr0I1UAOz5n0YmvCm8I5x/0E86PO22UC0zgFl0f7bmv+wbBeHHBySlanq4XTeTkvqGzivpiWaXJsgwUqY8NdWgBdhxlZO4CzpKb4+iA4EeAm7qEbZxwC5431RtMrFACcFWIh67UKAM5r9cbdKhQAnBViIeu1CgDOa/XG3SoUAJwVYiHrtQoMgTOef6zazHutPoK7LUul3pzsPmEvKI4srAKD4ESAG9sjuLApoA/OaDVmXZVp9UbBJuFcYNomSXiQePnNQ2JXUqjU8Wcq4az6YhqrSbxppBCYxth5fRLr8bkQECxfMkrWJ78vnLWBaaR2v+b59Yqu/Jrn59NE24/3PIBz16LzSB+cOa8kbmzsNcUFyxlL9QOcZQ2FORTCWfnFNLKh+37OYMwZ78sky+YSC17TFgWcOQGrrimEs/KLaVRz1z2YNYFplJ04TQKeJE9sF+ekAvrgJKrp3phrvN4KZ01gGnHfMMkOFYiXozATPGesR8f5n4Cz+iNZC5zJpmCXzkwBlUS0ZSVTUfCcJSXF15XBuay2xF7yisC0gmTOewPOgkrHXlYG5/4i4zez+rHeEpjm35A4di9WgJNQ5rwkZXAODEzLarx4dMCZVenoi+rgtA2MlwyTsaNUhWXsuS6BNttZPTHglCp/SL5BcCLA7ZDee3MjQ+B8c03RvIMUAJwHCQkzxysAOI/XFBYPUgBwHiQkzByvAOA8XlNYPEgBwHmQkDBzvAJD4IznMRHgdnzHvoPFQXAiwO0d4Dm7DWrhDDYJS1ZmIqUS71wKTIvK+6exrWywHXYl+dJ1HSuEMw6xuCgwjZHRgRn8OOL6RQUBZyRI+6k+OEcFppEaWhCJDca5LXyAk1SyJVEZnAWv1NLCtUwpMG3NF/yd65NsGLEbSuI9p2s5wLkq0f1XGZz7fs5gzMmBIG6+IDCNs2W9ZPBPfjPedC0POFcluv/qgnPZ4lb1xTSJBL3ABFvviMe8X4fee/m2bn6sE84RgWksCC/zWF+IVkjXc6oM4KRUaUpTCSc5xptODkwj5bOP8PS+bsjBDTUAJ6lkS6IuOM0+5gwa4zxWCkmQhzlJp4KYjFSyvS/lJbl0awNwUko2pSmDs+GLaYVmiwPTKDvcjwJwUmodnqYOTuOAmMy+CsNM54ikmMtOlPcTlad+LLPNvX6RIXjOSJD2U31w2rYsgF4amJbRMJjWmvwfDlEIcBKitCUNghMBbm3dda9SQ+C8l8RobasCgLNVOZQ7XQHAebrEuEGrAoCzVTmUO10BwHm6xLhBqwKAs1U5lDtdgSFwxmEP7x/gtiwGbKEihbnS07v9b9xgEJw3D3DDRL3o16EOzsSrbt6mfuNHbItdcixIFdo5YD8n4CwoPl9WB2f1F9OYZjqggjX1wpq41I5bWs0AKgFPkoepz52SlcHZ8MU0srcsiARAucA00o7dwpfa6d7PCThJteNEZXDG1Zv3Ryabj4lsYdLsJZNy1utxm4RDA/OZ85LEcCIHuQQ8SR6qPjdLUw7nhYFpVMfn4OR25kvAk+Sh6nOzNN1w9naig2sy89a79PFc7uvMYx1wluXrzKEYTmbcKG5wZWAaYzfeSW9ftB6f8ScQvcKSH5Qkj2fyrod64bReL3jbrukiC3Y6Vsy+yLDm5/HruvHZTkelMwFeYQl4kjyeybseqoUzC0CptziwufSSvei6hZydM5WAJ8kT3fOOp2rhjB+nVZ3jxpqp53ThH83eeK0BPQ5dr4qiLwHnJlfuQCmcy6O0A6T0ET7bZD0eo5Lz4NvLz1Kv3HSUBDxJHqY+d0pWCucS9dgBp+1EB+i2/Jl5FOd63Hnh9Y1fYEMCniRPrk43uTYIzrsFuIUvVfblqtaD34THoJlD4AxqgBMowCgAOBlhkDxeAcA5vg9QA0YBwMkIg+TxCgDO8X2AGjAKAE5GGCSPVwBwju8D1IBRAHAywiB5vAKAc3wfoAaMAoCTEQbJ4xUAnOP7ADVgFACcjDBIHq8A4BzfB6gBowDgZIRB8ngFAOf4PkANGAUAJyMMkscrADjH9wFqwCgAOBlhkDxeAcA5vg9QA0YBwMkIg+TxCgDO8X2AGjAK/AfMSn4HhuLGrAAAAABJRU5ErkJggg=="
|
||||
}
|
||||
},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **考虑一维数组Z,构建一个二维数组,其第一行为(Z [0],Z [1],Z [2]),随后的每一行都移位1(最后一行应为(Z [ -3],Z [-2],Z [-1])**\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"\n",
|
||||
"- (提示np.lib.stride_tricks)\n",
|
||||
"\n",
|
||||
"[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]-------->  "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **考虑两组点集P0和P1去描述一组线(二维)和一个点p,如何计算点p到每一条线 i (P0[i],P1[i])的距离?**\n",
|
||||
"- `P0 = np.random.uniform(-10,10,(10,2))\n",
|
||||
"P1 = np.random.uniform(-10,10,(10,2))\n",
|
||||
"p = np.random.uniform(-10,10,( 1,2))`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数】\n",
|
||||
"- 提示 设P(x0,y0),直线方程为:Ax+By+C=0\n",
|
||||
"则P到直线的距离为:d=|Ax0+By0+C|/√(A²+B²)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 逻辑函数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **获取a和b元素匹配的位置。**\n",
|
||||
"- `a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])`\n",
|
||||
"- `b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- 如何得到两个数组元素匹配的位置?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **获取5到10 之间的所有元素。**\n",
|
||||
"- `a = np.array([2, 6, 1, 9, 10, 3, 27])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- 如何从numpy数组中提取给定范围内的所有元素?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **对于两个随机数组A和B,检查他们是否相等**\n",
|
||||
"- `A = np.random.randint(0,2,5)\n",
|
||||
"B = np.random.randint(0,2,5)`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"\n",
|
||||
"- (提示: np.allclose, np.array_equal)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **何对布尔值取反,或者原位(in-place)改变浮点数的符号(sign)?**\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数】\n",
|
||||
"- (提示: np.logical_not, np.negative)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 排序搜索计数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **如何通过第n列对一个数组进行排序**\n",
|
||||
"- `Z = np.random.randint(0,10,(3,3))`\n",
|
||||
"\n",
|
||||
"【知识点:排序】\n",
|
||||
"\n",
|
||||
"- (提示: argsort)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **从`arr`中提取所有奇数。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从一维数组中提取满足指定条件的元素?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将`arr`中的偶数元素替换为0。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何用numpy数组中的另一个值替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### ** 将 `arr` 中的所有偶数元素替换为0,而不改变arr。**\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何在不影响原始数组的情况下替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **获取给定数组a中前5个最大值的位置。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.uniform(1, 50, 20)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从numpy数组中获取最大的n个值的位置?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **删除一维numpy数组中所有NaN值。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, np.nan, 5, 6, 7, np.nan])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数、搜索】\n",
|
||||
"- 如何删除numpy数组中的缺失值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 集合操作"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"cells": [],
|
||||
"metadata": {},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,828 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 排序,搜索和计数\n",
|
||||
"## 排序\n",
|
||||
"\n",
|
||||
"- `numpy.sort(a[, axis=-1, kind='quicksort', order=None])` Return a sorted **copy** of an array.\n",
|
||||
" - axis:排序沿数组的(轴)方向,0表示按行,1表示按列,None表示展开来排序,默认为-1,表示沿最后的轴排序。\n",
|
||||
" - kind:排序的算法,提供了快排'quicksort'、混排'mergesort'、堆排'heapsort', 默认为‘quicksort'。\n",
|
||||
" - order:排序的字段名,可指定字段排序,默认为None。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"y = np.sort(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[1.73 2.32 6.22 7.54 9.78]\n",
|
||||
"# [5.17 6.93 8.25 9.28 9.76]\n",
|
||||
"# [0.01 0.19 1.73 4.23 9.27]\n",
|
||||
"# [0.88 4.29 4.97 7.32 7.99]\n",
|
||||
"# [0.07 6.99 7.9 8.95 9.05]]\n",
|
||||
"\n",
|
||||
"y = np.sort(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[0.01 0.07 0.19 1.73 4.29]\n",
|
||||
"# [2.32 4.23 0.88 1.73 6.22]\n",
|
||||
"# [6.93 4.97 8.95 7.32 6.99]\n",
|
||||
"# [7.99 5.17 9.28 7.9 8.25]\n",
|
||||
"# [9.05 7.54 9.78 9.76 9.27]]\n",
|
||||
"\n",
|
||||
"y = np.sort(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[1.73 2.32 6.22 7.54 9.78]\n",
|
||||
"# [5.17 6.93 8.25 9.28 9.76]\n",
|
||||
"# [0.01 0.19 1.73 4.23 9.27]\n",
|
||||
"# [0.88 4.29 4.97 7.32 7.99]\n",
|
||||
"# [0.07 6.99 7.9 8.95 9.05]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"dt = np.dtype([('name', 'S10'), ('age', np.int)])\n",
|
||||
"a = np.array([(\"Mike\", 21), (\"Nancy\", 25), (\"Bob\", 17), (\"Jane\", 27)], dtype=dt)\n",
|
||||
"b = np.sort(a, order='name')\n",
|
||||
"print(b)\n",
|
||||
"# [(b'Bob', 17) (b'Jane', 27) (b'Mike', 21) (b'Nancy', 25)]\n",
|
||||
"\n",
|
||||
"b = np.sort(a, order='age')\n",
|
||||
"print(b)\n",
|
||||
"# [(b'Bob', 17) (b'Mike', 21) (b'Nancy', 25) (b'Jane', 27)]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"如果排序后,想用元素的索引位置替代排序后的实际结果,该怎么办呢?\n",
|
||||
"\n",
|
||||
"- `numpy.argsort(a[, axis=-1, kind='quicksort', order=None])` Returns the indices that would sort an array.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】对数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。这个索引数组用于构造排序后的数组。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.randint(0, 10, 10)\n",
|
||||
"print(x)\n",
|
||||
"# [6 1 8 5 5 4 1 2 9 1]\n",
|
||||
"\n",
|
||||
"y = np.argsort(x)\n",
|
||||
"print(y)\n",
|
||||
"# [1 6 9 7 5 3 4 0 2 8]\n",
|
||||
"\n",
|
||||
"print(x[y])\n",
|
||||
"# [1 1 1 2 4 5 5 6 8 9]\n",
|
||||
"\n",
|
||||
"y = np.argsort(-x)\n",
|
||||
"print(y)\n",
|
||||
"# [8 2 0 3 4 5 7 1 6 9]\n",
|
||||
"\n",
|
||||
"print(x[y])\n",
|
||||
"# [9 8 6 5 5 4 2 1 1 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"y = np.argsort(x)\n",
|
||||
"print(y)\n",
|
||||
"# [[3 0 4 1 2]\n",
|
||||
"# [1 0 4 2 3]\n",
|
||||
"# [0 2 3 1 4]\n",
|
||||
"# [2 4 1 3 0]\n",
|
||||
"# [1 4 3 2 0]]\n",
|
||||
"\n",
|
||||
"y = np.argsort(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[2 4 2 0 3]\n",
|
||||
"# [0 2 3 2 0]\n",
|
||||
"# [1 3 4 3 4]\n",
|
||||
"# [3 1 1 4 1]\n",
|
||||
"# [4 0 0 1 2]]\n",
|
||||
"\n",
|
||||
"y = np.argsort(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [[3 0 4 1 2]\n",
|
||||
"# [1 0 4 2 3]\n",
|
||||
"# [0 2 3 1 4]\n",
|
||||
"# [2 4 1 3 0]\n",
|
||||
"# [1 4 3 2 0]]\n",
|
||||
"\n",
|
||||
"y = np.array([np.take(x[i], np.argsort(x[i])) for i in range(5)]) \n",
|
||||
"#numpy.take(a, indices, axis=None, out=None, mode='raise')沿轴从数组中获取元素。\n",
|
||||
"print(y)\n",
|
||||
"# [[1.73 2.32 6.22 7.54 9.78]\n",
|
||||
"# [5.17 6.93 8.25 9.28 9.76]\n",
|
||||
"# [0.01 0.19 1.73 4.23 9.27]\n",
|
||||
"# [0.88 4.29 4.97 7.32 7.99]\n",
|
||||
"# [0.07 6.99 7.9 8.95 9.05]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"如何将数据按照某一指标进行排序呢?\n",
|
||||
"\n",
|
||||
"- `numpy.lexsort(keys[, axis=-1])` Perform an indirect stable sort using a sequence of keys.(使用键序列执行间接稳定排序。)\n",
|
||||
"\n",
|
||||
"- 给定多个可以在电子表格中解释为列的排序键,lexsort返回一个整数索引数组,该数组描述了按多个列排序的顺序。序列中的最后一个键用于主排序顺序,倒数第二个键用于辅助排序顺序,依此类推。keys参数必须是可以转换为相同形状的数组的对象序列。如果为keys参数提供了2D数组,则将其行解释为排序键,并根据最后一行,倒数第二行等进行排序。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】按照第一列的升序或者降序对整体数据进行排序。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"index = np.lexsort([x[:, 0]])\n",
|
||||
"print(index)\n",
|
||||
"# [2 0 1 3 4]\n",
|
||||
"\n",
|
||||
"y = x[index]\n",
|
||||
"print(y)\n",
|
||||
"# [[0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"index = np.lexsort([-1 * x[:, 0]])\n",
|
||||
"print(index)\n",
|
||||
"# [4 3 1 0 2]\n",
|
||||
"\n",
|
||||
"y = x[index]\n",
|
||||
"print(y)\n",
|
||||
"# [[9.05 0.07 8.95 7.9 6.99]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 5, 1, 4, 3, 4, 4])\n",
|
||||
"y = np.array([9, 4, 0, 4, 0, 2, 1])\n",
|
||||
"a = np.lexsort([x])\n",
|
||||
"b = np.lexsort([y])\n",
|
||||
"print(a)\n",
|
||||
"# [0 2 4 3 5 6 1]\n",
|
||||
"print(x[a])\n",
|
||||
"# [1 1 3 4 4 4 5]\n",
|
||||
"\n",
|
||||
"print(b)\n",
|
||||
"# [2 4 6 5 1 3 0]\n",
|
||||
"print(y[b])\n",
|
||||
"# [0 0 1 2 4 4 9]\n",
|
||||
"\n",
|
||||
"z = np.lexsort([y, x])\n",
|
||||
"print(z)\n",
|
||||
"# [2 0 4 6 5 3 1]\n",
|
||||
"print(x[z])\n",
|
||||
"# [1 1 3 4 4 4 5]\n",
|
||||
"\n",
|
||||
"z = np.lexsort([x, y])\n",
|
||||
"print(z)\n",
|
||||
"# [2 4 6 5 3 1 0]\n",
|
||||
"print(y[z])\n",
|
||||
"# [0 0 1 2 4 4 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.partition(a, kth, axis=-1, kind='introselect', order=None)` Return a partitioned copy of an array.\n",
|
||||
"\n",
|
||||
"Creates a copy of the array with its elements rearranged in such a way that the value of the element in k-th position is in the position it would be in a sorted array. All elements smaller than the k-th element are moved before this element and all equal or greater are moved behind it. The ordering of the elements in the two partitions is undefined.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】以索引是 kth 的元素为基准,将元素分成两部分,即大于该元素的放在其后面,小于该元素的放在其前面,这里有点类似于快排。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"\n",
|
||||
"y = np.sort(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 3 5 3]\n",
|
||||
"# [ 3 11 3]\n",
|
||||
"# [ 8 15 4]\n",
|
||||
"# [ 9 17 12]\n",
|
||||
"# [16 22 16]\n",
|
||||
"# [17 24 17]\n",
|
||||
"# [18 25 21]\n",
|
||||
"# [29 27 25]]\n",
|
||||
"\n",
|
||||
"z = np.partition(x, kth=2, axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[ 3 5 3]\n",
|
||||
"# [ 3 11 3]\n",
|
||||
"# [ 8 15 4]\n",
|
||||
"# [ 9 22 21]\n",
|
||||
"# [17 24 16]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 25 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"```\n",
|
||||
"【例】选取每一列第三小的数\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"z = np.partition(x, kth=2, axis=0)\n",
|
||||
"print(z[2])\n",
|
||||
"# [ 8 15 4]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】选取每一列第三大的数据\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"z = np.partition(x, kth=-3, axis=0)\n",
|
||||
"print(z[-3])\n",
|
||||
"# [17 24 17]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None)`\n",
|
||||
"\n",
|
||||
"Perform an indirect partition along the given axis using the algorithm specified by the `kind` keyword. It returns an array of indices of the same shape as `a` that index data along the given axis in partitioned order.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"\n",
|
||||
"y = np.argsort(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[3 6 3]\n",
|
||||
"# [4 2 4]\n",
|
||||
"# [1 4 0]\n",
|
||||
"# [0 5 6]\n",
|
||||
"# [6 3 1]\n",
|
||||
"# [2 1 7]\n",
|
||||
"# [5 0 2]\n",
|
||||
"# [7 7 5]]\n",
|
||||
"\n",
|
||||
"z = np.argpartition(x, kth=2, axis=0)\n",
|
||||
"print(z)\n",
|
||||
"# [[3 6 3]\n",
|
||||
"# [4 2 4]\n",
|
||||
"# [1 4 0]\n",
|
||||
"# [0 3 2]\n",
|
||||
"# [2 1 1]\n",
|
||||
"# [5 5 5]\n",
|
||||
"# [6 0 6]\n",
|
||||
"# [7 7 7]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】选取每一列第三小的数的索引\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"\n",
|
||||
"z = np.argpartition(x, kth=2, axis=0)\n",
|
||||
"print(z[2])\n",
|
||||
"# [1 4 0]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】选取每一列第三大的数的索引\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"x = np.random.randint(1, 30, [8, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[ 9 25 4]\n",
|
||||
"# [ 8 24 16]\n",
|
||||
"# [17 11 21]\n",
|
||||
"# [ 3 22 3]\n",
|
||||
"# [ 3 15 3]\n",
|
||||
"# [18 17 25]\n",
|
||||
"# [16 5 12]\n",
|
||||
"# [29 27 17]]\n",
|
||||
"\n",
|
||||
"z = np.argpartition(x, kth=-3, axis=0)\n",
|
||||
"print(z[-3])\n",
|
||||
"# [2 1 7]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 搜索\n",
|
||||
"\n",
|
||||
"- `numpy.argmax(a[, axis=None, out=None])`Returns the indices of the maximum values along an axis.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"y = np.argmax(x)\n",
|
||||
"print(y) # 2\n",
|
||||
"\n",
|
||||
"y = np.argmax(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [4 0 0 1 2]\n",
|
||||
"\n",
|
||||
"y = np.argmax(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [2 3 4 0 0]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.argmin(a[, axis=None, out=None])`Returns the indices of the minimum values along an axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(20200612)\n",
|
||||
"x = np.random.rand(5, 5) * 10\n",
|
||||
"x = np.around(x, 2)\n",
|
||||
"print(x)\n",
|
||||
"# [[2.32 7.54 9.78 1.73 6.22]\n",
|
||||
"# [6.93 5.17 9.28 9.76 8.25]\n",
|
||||
"# [0.01 4.23 0.19 1.73 9.27]\n",
|
||||
"# [7.99 4.97 0.88 7.32 4.29]\n",
|
||||
"# [9.05 0.07 8.95 7.9 6.99]]\n",
|
||||
"\n",
|
||||
"y = np.argmin(x)\n",
|
||||
"print(y) # 10\n",
|
||||
"\n",
|
||||
"y = np.argmin(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [2 4 2 0 3]\n",
|
||||
"\n",
|
||||
"y = np.argmin(x, axis=1)\n",
|
||||
"print(y)\n",
|
||||
"# [3 1 0 2 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numppy.nonzero(a)` Return the indices of the elements that are non-zero.\n",
|
||||
"\n",
|
||||
",其值为非零元素的下标在对应轴上的值。\n",
|
||||
"\n",
|
||||
"1. 只有`a`中非零元素才会有索引值,那些零值元素没有索引值。\n",
|
||||
"2. 返回一个长度为`a.ndim`的元组(tuple),元组的每个元素都是一个整数数组(array)。\n",
|
||||
"3. 每一个array均是从一个维度上来描述其索引值。比如,如果`a`是一个二维数组,则tuple包含两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值。\n",
|
||||
"4. 该 `np.transpose(np.nonzero(x))` 函数能够描述出每一个非零元素在不同维度的索引值。\n",
|
||||
"5. 通过`a[nonzero(a)]`得到所有`a`中的非零值。\n",
|
||||
"\n",
|
||||
"【例】一维数组\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([0, 2, 3])\n",
|
||||
"print(x) # [0 2 3]\n",
|
||||
"print(x.shape) # (3,)\n",
|
||||
"print(x.ndim) # 1\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x)\n",
|
||||
"print(y) # (array([1, 2], dtype=int64),)\n",
|
||||
"print(np.array(y)) # [[1 2]]\n",
|
||||
"print(np.array(y).shape) # (1, 2)\n",
|
||||
"print(np.array(y).ndim) # 2\n",
|
||||
"print(np.transpose(y))\n",
|
||||
"# [[1]\n",
|
||||
"# [2]]\n",
|
||||
"print(x[np.nonzero(x)])\n",
|
||||
"#[2, 3]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】二维数组\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])\n",
|
||||
"print(x)\n",
|
||||
"# [[3 0 0]\n",
|
||||
"# [0 4 0]\n",
|
||||
"# [5 6 0]]\n",
|
||||
"print(x.shape) # (3, 3)\n",
|
||||
"print(x.ndim) # 2\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x)\n",
|
||||
"print(y)\n",
|
||||
"# (array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))\n",
|
||||
"print(np.array(y))\n",
|
||||
"# [[0 1 2 2]\n",
|
||||
"# [0 1 0 1]]\n",
|
||||
"print(np.array(y).shape) # (2, 4)\n",
|
||||
"print(np.array(y).ndim) # 2\n",
|
||||
"\n",
|
||||
"y = x[np.nonzero(x)]\n",
|
||||
"print(y) # [3 4 5 6]\n",
|
||||
"\n",
|
||||
"y = np.transpose(np.nonzero(x))\n",
|
||||
"print(y)\n",
|
||||
"# [[0 0]\n",
|
||||
"# [1 1]\n",
|
||||
"# [2 0]\n",
|
||||
"# [2 1]]\n",
|
||||
"```\n",
|
||||
"【例】三维数组\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[[0, 1], [1, 0]], [[0, 1], [1, 0]], [[0, 0], [1, 0]]])\n",
|
||||
"print(x)\n",
|
||||
"# [[[0 1]\n",
|
||||
"# [1 0]]\n",
|
||||
"#\n",
|
||||
"# [[0 1]\n",
|
||||
"# [1 0]]\n",
|
||||
"#\n",
|
||||
"# [[0 0]\n",
|
||||
"# [1 0]]]\n",
|
||||
"print(np.shape(x)) # (3, 2, 2)\n",
|
||||
"print(x.ndim) # 3\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x)\n",
|
||||
"print(np.array(y))\n",
|
||||
"# [[0 0 1 1 2]\n",
|
||||
"# [0 1 0 1 1]\n",
|
||||
"# [1 0 1 0 0]]\n",
|
||||
"print(np.array(y).shape) # (3, 5)\n",
|
||||
"print(np.array(y).ndim) # 2\n",
|
||||
"print(y)\n",
|
||||
"# (array([0, 0, 1, 1, 2], dtype=int64), array([0, 1, 0, 1, 1], dtype=int64), array([1, 0, 1, 0, 0], dtype=int64))\n",
|
||||
"print(x[np.nonzero(x)])\n",
|
||||
"#[1 1 1 1 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】`nonzero()`将布尔数组转换成整数数组进行操作。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n",
|
||||
"print(x)\n",
|
||||
"# [[1 2 3]\n",
|
||||
"# [4 5 6]\n",
|
||||
"# [7 8 9]]\n",
|
||||
"\n",
|
||||
"y = x > 3\n",
|
||||
"print(y)\n",
|
||||
"# [[False False False]\n",
|
||||
"# [ True True True]\n",
|
||||
"# [ True True True]]\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x > 3)\n",
|
||||
"print(y)\n",
|
||||
"# (array([1, 1, 1, 2, 2, 2], dtype=int64), array([0, 1, 2, 0, 1, 2], dtype=int64))\n",
|
||||
"\n",
|
||||
"y = x[np.nonzero(x > 3)]\n",
|
||||
"print(y)\n",
|
||||
"# [4 5 6 7 8 9]\n",
|
||||
"\n",
|
||||
"y = x[x > 3]\n",
|
||||
"print(y)\n",
|
||||
"# [4 5 6 7 8 9]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.where(condition, [x=None, y=None])` Return elements chosen from `x` or `y` depending on `condition`.\n",
|
||||
"\n",
|
||||
"【例】满足条件`condition`,输出`x`,不满足输出`y`。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.arange(10)\n",
|
||||
"print(x)\n",
|
||||
"# [0 1 2 3 4 5 6 7 8 9]\n",
|
||||
"\n",
|
||||
"y = np.where(x < 5, x, 10 * x)\n",
|
||||
"print(y)\n",
|
||||
"# [ 0 1 2 3 4 50 60 70 80 90]\n",
|
||||
"\n",
|
||||
"x = np.array([[0, 1, 2],\n",
|
||||
" [0, 2, 4],\n",
|
||||
" [0, 3, 6]])\n",
|
||||
"y = np.where(x < 4, x, -1)\n",
|
||||
"print(y)\n",
|
||||
"# [[ 0 1 2]\n",
|
||||
"# [ 0 2 -1]\n",
|
||||
"# [ 0 3 -1]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】只有`condition`,没有`x`和`y`,则输出满足条件 (即非0) 元素的坐标 (等价于`numpy.nonzero`)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 3, 4, 5, 6, 7, 8])\n",
|
||||
"y = np.where(x > 5)\n",
|
||||
"print(y)\n",
|
||||
"# (array([5, 6, 7], dtype=int64),)\n",
|
||||
"print(x[y])\n",
|
||||
"# [6 7 8]\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x > 5)\n",
|
||||
"print(y)\n",
|
||||
"# (array([5, 6, 7], dtype=int64),)\n",
|
||||
"print(x[y])\n",
|
||||
"# [6 7 8]\n",
|
||||
"\n",
|
||||
"x = np.array([[11, 12, 13, 14, 15],\n",
|
||||
" [16, 17, 18, 19, 20],\n",
|
||||
" [21, 22, 23, 24, 25],\n",
|
||||
" [26, 27, 28, 29, 30],\n",
|
||||
" [31, 32, 33, 34, 35]])\n",
|
||||
"y = np.where(x > 25)\n",
|
||||
"print(y)\n",
|
||||
"# (array([3, 3, 3, 3, 3, 4, 4, 4, 4, 4], dtype=int64), array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))\n",
|
||||
"\n",
|
||||
"print(x[y])\n",
|
||||
"# [26 27 28 29 30 31 32 33 34 35]\n",
|
||||
"\n",
|
||||
"y = np.nonzero(x > 25)\n",
|
||||
"print(y)\n",
|
||||
"# (array([3, 3, 3, 3, 3, 4, 4, 4, 4, 4], dtype=int64), array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))\n",
|
||||
"print(x[y])\n",
|
||||
"# [26 27 28 29 30 31 32 33 34 35]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.searchsorted(a, v[, side='left', sorter=None])` Find indices where elements should be inserted to maintain order.\n",
|
||||
" - a:一维输入数组。当`sorter`参数为`None`的时候,`a`必须为升序数组;否则,`sorter`不能为空,存放`a`中元素的`index`,用于反映`a`数组的升序排列方式。\n",
|
||||
" - v:插入`a`数组的值,可以为单个元素,`list`或者`ndarray`。\n",
|
||||
" - side:查询方向,当为`left`时,将返回第一个符合条件的元素下标;当为`right`时,将返回最后一个符合条件的元素下标。\n",
|
||||
" - sorter:一维数组存放`a`数组元素的 index,index 对应元素为升序。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([0, 1, 5, 9, 11, 18, 26, 33])\n",
|
||||
"y = np.searchsorted(x, 15)\n",
|
||||
"print(y) # 5\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 15, side='right')\n",
|
||||
"print(y) # 5\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, -1)\n",
|
||||
"print(y) # 0\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, -1, side='right')\n",
|
||||
"print(y) # 0\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 35)\n",
|
||||
"print(y) # 8\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 35, side='right')\n",
|
||||
"print(y) # 8\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 11)\n",
|
||||
"print(y) # 4\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 11, side='right')\n",
|
||||
"print(y) # 5\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 0)\n",
|
||||
"print(y) # 0\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 0, side='right')\n",
|
||||
"print(y) # 1\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 33)\n",
|
||||
"print(y) # 7\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, 33, side='right')\n",
|
||||
"print(y) # 8\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([0, 1, 5, 9, 11, 18, 26, 33])\n",
|
||||
"y = np.searchsorted(x, [-1, 0, 11, 15, 33, 35])\n",
|
||||
"print(y) # [0 0 4 5 7 8]\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, [-1, 0, 11, 15, 33, 35], side='right')\n",
|
||||
"print(y) # [0 1 5 5 8 8]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.array([0, 1, 5, 9, 11, 18, 26, 33])\n",
|
||||
"np.random.shuffle(x)\n",
|
||||
"print(x) # [33 1 9 18 11 26 0 5]\n",
|
||||
"\n",
|
||||
"x_sort = np.argsort(x)\n",
|
||||
"print(x_sort) # [6 1 7 2 4 3 5 0]\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, [-1, 0, 11, 15, 33, 35], sorter=x_sort)\n",
|
||||
"print(y) # [0 0 4 5 7 8]\n",
|
||||
"\n",
|
||||
"y = np.searchsorted(x, [-1, 0, 11, 15, 33, 35], side='right', sorter=x_sort)\n",
|
||||
"print(y) # [0 1 5 5 8 8]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 计数\n",
|
||||
"\n",
|
||||
"- `numpy.count_nonzero(a, axis=None)` Counts the number of non-zero values in the array a.\n",
|
||||
"\n",
|
||||
"【例】返回数组中的非0元素个数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.count_nonzero(np.eye(4))\n",
|
||||
"print(x) # 4\n",
|
||||
"\n",
|
||||
"x = np.count_nonzero([[0, 1, 7, 0, 0], [3, 0, 0, 2, 19]])\n",
|
||||
"print(x) # 5\n",
|
||||
"\n",
|
||||
"x = np.count_nonzero([[0, 1, 7, 0, 0], [3, 0, 0, 2, 19]], axis=0)\n",
|
||||
"print(x) # [1 1 1 1 1]\n",
|
||||
"\n",
|
||||
"x = np.count_nonzero([[0, 1, 7, 0, 0], [3, 0, 0, 2, 19]], axis=1)\n",
|
||||
"print(x) # [2 3]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"\n",
|
||||
"- https://blog.csdn.net/u013698770/article/details/54632047\n",
|
||||
"- https://www.cnblogs.com/massquantity/p/8908859.html\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
246
IntroductionToNumpy/numpy/task05-3天排序搜索计数及集合操作/10. 集合操作.ipynb
Normal file
246
IntroductionToNumpy/numpy/task05-3天排序搜索计数及集合操作/10. 集合操作.ipynb
Normal file
@@ -0,0 +1,246 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 集合操作\n",
|
||||
"\n",
|
||||
"## 构造集合\n",
|
||||
"\n",
|
||||
"- `numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)` Find the unique elements of an array.\n",
|
||||
" - `return_index=True` 表示返回新列表元素在旧列表中的位置。\n",
|
||||
" - `return_inverse=True`表示返回旧列表元素在新列表中的位置。\n",
|
||||
" - `return_counts=True`表示返回新列表元素在旧列表中出现的次数。\n",
|
||||
" \n",
|
||||
" \n",
|
||||
"【例】找出数组中的唯一值并返回已排序的结果。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.unique([1, 1, 3, 2, 3, 3])\n",
|
||||
"print(x) # [1 2 3]\n",
|
||||
"\n",
|
||||
"x = sorted(set([1, 1, 3, 2, 3, 3]))\n",
|
||||
"print(x) # [1, 2, 3]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 1], [2, 3]])\n",
|
||||
"u = np.unique(x)\n",
|
||||
"print(u) # [1 2 3]\n",
|
||||
"\n",
|
||||
"x = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])\n",
|
||||
"y = np.unique(x, axis=0)\n",
|
||||
"print(y)\n",
|
||||
"# [[1 0 0]\n",
|
||||
"# [2 3 4]]\n",
|
||||
"\n",
|
||||
"x = np.array(['a', 'b', 'b', 'c', 'a'])\n",
|
||||
"u, index = np.unique(x, return_index=True)\n",
|
||||
"print(u) # ['a' 'b' 'c']\n",
|
||||
"print(index) # [0 1 3]\n",
|
||||
"print(x[index]) # ['a' 'b' 'c']\n",
|
||||
"\n",
|
||||
"x = np.array([1, 2, 6, 4, 2, 3, 2])\n",
|
||||
"u, index = np.unique(x, return_inverse=True)\n",
|
||||
"print(u) # [1 2 3 4 6]\n",
|
||||
"print(index) # [0 1 4 3 1 2 1]\n",
|
||||
"print(u[index]) # [1 2 6 4 2 3 2]\n",
|
||||
"\n",
|
||||
"u, count = np.unique(x, return_counts=True)\n",
|
||||
"print(u) # [1 2 3 4 6]\n",
|
||||
"print(count) # [1 3 1 1 1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"## 布尔运算\n",
|
||||
"\n",
|
||||
"- `numpy.in1d(ar1, ar2, assume_unique=False, invert=False)` Test whether each element of a 1-D array is also present in a second array.\n",
|
||||
"\n",
|
||||
"Returns a boolean array the same length as `ar1` that is True where an element of `ar1` is in `ar2` and False otherwise.\n",
|
||||
"\n",
|
||||
"【例】前面的数组是否包含于后面的数组,返回布尔值。返回的值是针对第一个参数的数组的,所以维数和第一个参数一致,布尔值与数组的元素位置也一一对应。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"test = np.array([0, 1, 2, 5, 0])\n",
|
||||
"states = [0, 2]\n",
|
||||
"mask = np.in1d(test, states)\n",
|
||||
"print(mask) # [ True False True False True]\n",
|
||||
"print(test[mask]) # [0 2 0]\n",
|
||||
"\n",
|
||||
"mask = np.in1d(test, states, invert=True)\n",
|
||||
"print(mask) # [False True False True False]\n",
|
||||
"print(test[mask]) # [1 5]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"### 求两个集合的交集:\n",
|
||||
"\n",
|
||||
"- `numpy.intersect1d(ar1, ar2, assume_unique=False, return_indices=False)` Find the intersection of two arrays.\n",
|
||||
"\n",
|
||||
"Return the sorted, unique values that are in both of the input arrays.\n",
|
||||
"\n",
|
||||
"【例】求两个数组的唯一化+求交集+排序函数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"from functools import reduce\n",
|
||||
"\n",
|
||||
"x = np.intersect1d([1, 3, 4, 3], [3, 1, 2, 1])\n",
|
||||
"print(x) # [1 3]\n",
|
||||
"\n",
|
||||
"x = np.array([1, 1, 2, 3, 4])\n",
|
||||
"y = np.array([2, 1, 4, 6])\n",
|
||||
"xy, x_ind, y_ind = np.intersect1d(x, y, return_indices=True)\n",
|
||||
"print(x_ind) # [0 2 4]\n",
|
||||
"print(y_ind) # [1 0 2]\n",
|
||||
"print(xy) # [1 2 4]\n",
|
||||
"print(x[x_ind]) # [1 2 4]\n",
|
||||
"print(y[y_ind]) # [1 2 4]\n",
|
||||
"\n",
|
||||
"x = reduce(np.intersect1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))\n",
|
||||
"print(x) # [3]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### 求两个集合的并集:\n",
|
||||
"\n",
|
||||
"- `numpy.union1d(ar1, ar2)` Find the union of two arrays.\n",
|
||||
"\n",
|
||||
"Return the unique, sorted array of values that are in either of the two input arrays.\n",
|
||||
"\n",
|
||||
"【例】计算两个集合的并集,唯一化并排序。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"from functools import reduce\n",
|
||||
"\n",
|
||||
"x = np.union1d([-1, 0, 1], [-2, 0, 2])\n",
|
||||
"print(x) # [-2 -1 0 1 2]\n",
|
||||
"x = reduce(np.union1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))\n",
|
||||
"print(x) # [1 2 3 4 6]\n",
|
||||
"'''\n",
|
||||
"functools.reduce(function, iterable[, initializer])\n",
|
||||
"将两个参数的 function 从左至右积累地应用到 iterable 的条目,以便将该可迭代对象缩减为单一的值。 例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 是计算 ((((1+2)+3)+4)+5) 的值。 左边的参数 x 是积累值而右边的参数 y 则是来自 iterable 的更新值。 如果存在可选项 initializer,它会被放在参与计算的可迭代对象的条目之前,并在可迭代对象为空时作为默认值。 如果没有给出 initializer 并且 iterable 仅包含一个条目,则将返回第一项。\n",
|
||||
"\n",
|
||||
"大致相当于:\n",
|
||||
"def reduce(function, iterable, initializer=None):\n",
|
||||
" it = iter(iterable)\n",
|
||||
" if initializer is None:\n",
|
||||
" value = next(it)\n",
|
||||
" else:\n",
|
||||
" value = initializer\n",
|
||||
" for element in it:\n",
|
||||
" value = function(value, element)\n",
|
||||
" return value\n",
|
||||
"'''\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### 求两个集合的差集:\n",
|
||||
"\n",
|
||||
"- `numpy.setdiff1d(ar1, ar2, assume_unique=False)` Find the set difference of two arrays.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Return the unique values in `ar1` that are not in `ar2`.\n",
|
||||
"\n",
|
||||
"【例】集合的差,即元素存在于第一个函数不存在于第二个函数中。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 2, 4, 1])\n",
|
||||
"b = np.array([3, 4, 5, 6])\n",
|
||||
"x = np.setdiff1d(a, b)\n",
|
||||
"print(x) # [1 2]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"### 求两个集合的异或:\n",
|
||||
"\n",
|
||||
"- `setxor1d(ar1, ar2, assume_unique=False)` Find the set exclusive-or of two arrays.\n",
|
||||
"\n",
|
||||
"【例】集合的对称差,即两个集合的交集的补集。简言之,就是两个数组中各自独自拥有的元素的集合。\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 2, 4, 1])\n",
|
||||
"b = np.array([3, 4, 5, 6])\n",
|
||||
"x = np.setxor1d(a, b)\n",
|
||||
"print(x) # [1 2 5 6]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"**参考文献**\n",
|
||||
"- https://www.jianshu.com/p/3bfe21aa1adb\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,512 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 排序搜索计数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**如何通过第n列对一个数组进行排序**\n",
|
||||
"\n",
|
||||
"【知识点:排序】\n",
|
||||
"\n",
|
||||
"- (提示: argsort)\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:34.985841Z",
|
||||
"start_time": "2020-09-15T07:06:34.567440Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[1 6 0]\n",
|
||||
" [7 0 3]\n",
|
||||
" [0 6 0]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"Z = np.random.randint(0,10,(3,3))\n",
|
||||
"print (Z)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:35.022771Z",
|
||||
"start_time": "2020-09-15T07:06:35.000801Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[1 6 0]\n",
|
||||
" [0 6 0]\n",
|
||||
" [7 0 3]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print (Z[Z[:,2].argsort()])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:43:15.537614Z",
|
||||
"start_time": "2020-09-06T02:43:15.532628Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**从`arr`中提取所有奇数。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从一维数组中提取满足指定条件的元素?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:35.384825Z",
|
||||
"start_time": "2020-09-15T07:06:35.376847Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[1 3 5 7 9]\n",
|
||||
"[1 3 5 7 9]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"#【答案】\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(10)\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"index = np.where(arr % 2 == 1)\n",
|
||||
"print(arr[index])\n",
|
||||
"# [1 3 5 7 9]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"x = arr[arr % 2 == 1]\n",
|
||||
"print(x)\n",
|
||||
"# [1 3 5 7 9]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**将`arr`中的偶数元素替换为0。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何用numpy数组中的另一个值替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:35.907995Z",
|
||||
"start_time": "2020-09-15T07:06:35.903011Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0 1 0 3 0 5 0 7 0 9]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(10)\n",
|
||||
"index = np.where(arr % 2 == 0)\n",
|
||||
"arr[index] = 0\n",
|
||||
"print(arr)\n",
|
||||
"# [0 1 0 3 0 5 0 7 0 9]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**将 `arr` 中的所有偶数元素替换为0,而不改变arr。**\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何在不影响原始数组的情况下替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:36.689514Z",
|
||||
"start_time": "2020-09-15T07:06:36.608498Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[0 1 0 3 0 5 0 7 0 9]\n",
|
||||
"[0 1 2 3 4 5 6 7 8 9]\n",
|
||||
"[0 1 0 3 0 5 0 7 0 9]\n",
|
||||
"[0 1 2 3 4 5 6 7 8 9]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"arr = np.arange(10)\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"x = np.where(arr % 2 == 0, 0, arr)\n",
|
||||
"print(x)\n",
|
||||
"# [0 1 0 3 0 5 0 7 0 9]\n",
|
||||
"print(arr)\n",
|
||||
"# [0 1 2 3 4 5 6 7 8 9]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"x = np.copy(arr)\n",
|
||||
"x[x % 2 == 0] = 0\n",
|
||||
"print(x)\n",
|
||||
"# [0 1 0 3 0 5 0 7 0 9]\n",
|
||||
"print(arr)\n",
|
||||
"# [0 1 2 3 4 5 6 7 8 9]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:10:15.790588Z",
|
||||
"start_time": "2020-09-06T03:10:15.785591Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**获取给定数组a中前5个最大值的位置。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.uniform(1, 50, 20)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从numpy数组中获取最大的n个值的位置?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:37.223217Z",
|
||||
"start_time": "2020-09-15T07:06:37.205278Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[27.62684215 14.64009987 21.80136195 42.39403048 1.23122395 6.95688692\n",
|
||||
" 33.86670515 41.466785 7.69862289 29.17957314 44.67477576 11.25090398\n",
|
||||
" 10.08108276 6.31046763 11.76517714 48.95256545 40.77247431 9.42510962\n",
|
||||
" 40.99501269 14.42961361]\n",
|
||||
"[ 4 13 5 8 17 12 11 14 19 1 2 0 9 6 16 18 7 3 10 15]\n",
|
||||
"[18 7 3 10 15]\n",
|
||||
"(array([ 3, 7, 10, 15, 18], dtype=int64),)\n",
|
||||
"[18 7 3 10 15]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.random.seed(100)\n",
|
||||
"a = np.random.uniform(1, 50, 20)\n",
|
||||
"print(a)\n",
|
||||
"# [27.62684215 14.64009987 21.80136195 42.39403048 1.23122395 6.95688692\n",
|
||||
"# 33.86670515 41.466785 7.69862289 29.17957314 44.67477576 11.25090398\n",
|
||||
"# 10.08108276 6.31046763 11.76517714 48.95256545 40.77247431 9.42510962\n",
|
||||
"# 40.99501269 14.42961361]\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"b = np.argsort(a)\n",
|
||||
"print(b)\n",
|
||||
"print(b[-5:])\n",
|
||||
"# [18 7 3 10 15]\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"b = np.sort(a)\n",
|
||||
"b = np.where(a >= b[-5])\n",
|
||||
"print(b)\n",
|
||||
"# (array([ 3, 7, 10, 15, 18], dtype=int64),)\n",
|
||||
"\n",
|
||||
"# 方法3\n",
|
||||
"b = np.argpartition(a, kth=-5)\n",
|
||||
"print(b[-5:])\n",
|
||||
"# [18 7 3 10 15]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:16:45.278429Z",
|
||||
"start_time": "2020-09-06T03:16:45.274474Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**删除一维numpy数组中所有NaN值。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, np.nan, 5, 6, 7, np.nan])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数、搜索】\n",
|
||||
"- 如何删除numpy数组中的缺失值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:37.705909Z",
|
||||
"start_time": "2020-09-15T07:06:37.699887Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[1. 2. 3. 5. 6. 7.]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, np.nan, 5, 6, 7, np.nan])\n",
|
||||
"b = np.isnan(a)\n",
|
||||
"c = np.where(np.logical_not(b))\n",
|
||||
"print(a[c])\n",
|
||||
"# [1. 2. 3. 5. 6. 7.]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 集合操作"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:49:53.817130Z",
|
||||
"start_time": "2020-09-06T02:49:53.812188Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**获取数组a和数组b之间的公共项。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])`\n",
|
||||
"- `b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])`\n",
|
||||
"\n",
|
||||
"【知识点:集合操作】\n",
|
||||
"- 如何获取两个numpy数组之间的公共项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:38.496578Z",
|
||||
"start_time": "2020-09-15T07:06:38.489570Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[2 4]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])\n",
|
||||
"b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])\n",
|
||||
"x = np.intersect1d(a, b)\n",
|
||||
"print(x) # [2 4]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T02:50:45.262179Z",
|
||||
"start_time": "2020-09-06T02:50:45.257192Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**从数组a中删除数组b中的所有项。**\n",
|
||||
"- `a = np.array([1, 2, 3, 4, 5])`\n",
|
||||
"- `b = np.array([5, 6, 7, 8, 9])`\n",
|
||||
"\n",
|
||||
"【知识点:集合操作】\n",
|
||||
"- 如何从一个数组中删除存在于另一个数组中的项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-15T07:06:39.018110Z",
|
||||
"start_time": "2020-09-15T07:06:38.996083Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[1 2 3 4]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"b = np.array([5, 6, 7, 8, 9])\n",
|
||||
"x = np.setdiff1d(a, b)\n",
|
||||
"print(x) # [1 2 3 4]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {
|
||||
"height": "calc(100% - 180px)",
|
||||
"left": "10px",
|
||||
"top": "150px",
|
||||
"width": "307.2px"
|
||||
},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 排序搜索计数"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **如何通过第n列对一个数组进行排序**\n",
|
||||
"- `Z = np.random.randint(0,10,(3,3))`\n",
|
||||
"\n",
|
||||
"【知识点:排序】\n",
|
||||
"\n",
|
||||
"- (提示: argsort)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **从`arr`中提取所有奇数。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从一维数组中提取满足指定条件的元素?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **将`arr`中的偶数元素替换为0。**\n",
|
||||
"\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何用numpy数组中的另一个值替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### ** 将 `arr` 中的所有偶数元素替换为0,而不改变arr。**\n",
|
||||
"- `arr = np.arange(10)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何在不影响原始数组的情况下替换满足条件的元素项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **获取给定数组a中前5个最大值的位置。**\n",
|
||||
"\n",
|
||||
"- `a = np.random.uniform(1, 50, 20)`\n",
|
||||
"\n",
|
||||
"【知识点:搜索】\n",
|
||||
"- 如何从numpy数组中获取最大的n个值的位置?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **删除一维numpy数组中所有NaN值。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, np.nan, 5, 6, 7, np.nan])`\n",
|
||||
"\n",
|
||||
"【知识点:逻辑函数、搜索】\n",
|
||||
"- 如何删除numpy数组中的缺失值?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 集合操作"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **获取数组a和数组b之间的公共项。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])`\n",
|
||||
"- `b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])`\n",
|
||||
"\n",
|
||||
"【知识点:集合操作】\n",
|
||||
"- 如何获取两个numpy数组之间的公共项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### **从数组a中删除数组b中的所有项。**\n",
|
||||
"- `a = np.array([1, 2, 3, 4, 5])`\n",
|
||||
"- `b = np.array([5, 6, 7, 8, 9])`\n",
|
||||
"\n",
|
||||
"【知识点:集合操作】\n",
|
||||
"- 如何从一个数组中删除存在于另一个数组中的项?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
230
IntroductionToNumpy/numpy/线性代数/13. 线性代数.-练习题.ipynb
Normal file
230
IntroductionToNumpy/numpy/线性代数/13. 线性代数.-练习题.ipynb
Normal file
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:20:09.947636Z",
|
||||
"start_time": "2020-09-06T03:20:09.941689Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**计算两个数组a和数组b之间的欧氏距离。**\n",
|
||||
"\n",
|
||||
"- `a = np.array([1, 2, 3, 4, 5])`\n",
|
||||
"- `b = np.array([4, 5, 6, 7, 8])`\n",
|
||||
"\n",
|
||||
"【知识点:数学函数、线性代数】\n",
|
||||
"- 如何计算两个数组之间的欧式距离?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:20:29.252448Z",
|
||||
"start_time": "2020-09-06T03:20:29.247462Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"6.708203932499369\n",
|
||||
"6.708203932499369\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3, 4, 5])\n",
|
||||
"b = np.array([4, 5, 6, 7, 8])\n",
|
||||
"\n",
|
||||
"# 方法1\n",
|
||||
"d = np.sqrt(np.sum((a - b) ** 2))\n",
|
||||
"print(d) # 6.708203932499369\n",
|
||||
"\n",
|
||||
"# 方法2\n",
|
||||
"d = np.linalg.norm(a - b)\n",
|
||||
"print(d) # 6.708203932499369"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**计算矩阵的行列式和矩阵的逆**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:14:17.578966Z",
|
||||
"start_time": "2020-09-14T09:14:17.574254Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[5, 0, 0, 0, 0],\n",
|
||||
" [0, 5, 0, 0, 0],\n",
|
||||
" [0, 0, 5, 0, 0],\n",
|
||||
" [0, 0, 0, 5, 0],\n",
|
||||
" [0, 0, 0, 0, 5]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"np.diag([5,5,5,5,5])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:14:06.174005Z",
|
||||
"start_time": "2020-09-14T09:14:06.171012Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
" result=np.diag([5,5,5,5,5])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:14:07.806217Z",
|
||||
"start_time": "2020-09-14T09:14:07.800758Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"3124.999999999999"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"np.linalg.det(result)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-14T09:16:30.223746Z",
|
||||
"start_time": "2020-09-14T09:16:30.217896Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[0.2, 0. , 0. , 0. , 0. ],\n",
|
||||
" [0. , 0.2, 0. , 0. , 0. ],\n",
|
||||
" [0. , 0. , 0.2, 0. , 0. ],\n",
|
||||
" [0. , 0. , 0. , 0.2, 0. ],\n",
|
||||
" [0. , 0. , 0. , 0. , 0.2]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"np.linalg.inv(result)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
656
IntroductionToNumpy/numpy/线性代数/13. 线性代数..ipynb
Normal file
656
IntroductionToNumpy/numpy/线性代数/13. 线性代数..ipynb
Normal file
File diff suppressed because one or more lines are too long
258
IntroductionToNumpy/numpy/统计相关/12. 统计相关-练习题.ipynb
Normal file
258
IntroductionToNumpy/numpy/统计相关/12. 统计相关-练习题.ipynb
Normal file
File diff suppressed because one or more lines are too long
452
IntroductionToNumpy/numpy/统计相关/12. 统计相关.ipynb
Normal file
452
IntroductionToNumpy/numpy/统计相关/12. 统计相关.ipynb
Normal file
File diff suppressed because one or more lines are too long
229
IntroductionToNumpy/numpy/输入输出/14. 输入和输出-练习题.ipynb
Normal file
229
IntroductionToNumpy/numpy/输入输出/14. 输入和输出-练习题.ipynb
Normal file
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:05:42.613206Z",
|
||||
"start_time": "2020-09-06T03:05:42.609217Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**只打印或显示numpy数组rand_arr的小数点后3位。**\n",
|
||||
"\n",
|
||||
"- `rand_arr = np.random.random([5, 3])`\n",
|
||||
"\n",
|
||||
"【知识点:输入和输出】\n",
|
||||
"- 如何在numpy数组中只打印小数点后三位?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:06:03.840763Z",
|
||||
"start_time": "2020-09-06T03:06:03.834778Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[0.25106063 0.32735642 0.17623774]\n",
|
||||
" [0.85566173 0.11420437 0.53735783]\n",
|
||||
" [0.82253612 0.07625331 0.9358199 ]\n",
|
||||
" [0.97268875 0.91794448 0.61845404]\n",
|
||||
" [0.58615827 0.28096349 0.88048956]]\n",
|
||||
"[[0.251 0.327 0.176]\n",
|
||||
" [0.856 0.114 0.537]\n",
|
||||
" [0.823 0.076 0.936]\n",
|
||||
" [0.973 0.918 0.618]\n",
|
||||
" [0.586 0.281 0.88 ]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"rand_arr = np.random.random([5, 3])\n",
|
||||
"print(rand_arr)\n",
|
||||
"# [[0.33033427 0.05538836 0.05947305]\n",
|
||||
"# [0.36199439 0.48844555 0.26309599]\n",
|
||||
"# [0.05361816 0.71539075 0.60645637]\n",
|
||||
"# [0.95000384 0.31424729 0.41032467]\n",
|
||||
"# [0.36082793 0.50101268 0.6306832 ]]\n",
|
||||
"\n",
|
||||
"np.set_printoptions(precision=3)\n",
|
||||
"print(rand_arr)\n",
|
||||
"# [[0.33 0.055 0.059]\n",
|
||||
"# [0.362 0.488 0.263]\n",
|
||||
"# [0.054 0.715 0.606]\n",
|
||||
"# [0.95 0.314 0.41 ]\n",
|
||||
"# [0.361 0.501 0.631]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:06:22.855956Z",
|
||||
"start_time": "2020-09-06T03:06:22.850970Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**将numpy数组a中打印的项数限制为最多6个元素。**\n",
|
||||
"\n",
|
||||
"【知识点:输入和输出】\n",
|
||||
"- 如何限制numpy数组输出中打印的项目数?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:06:51.128200Z",
|
||||
"start_time": "2020-09-06T03:06:51.123215Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]\n",
|
||||
"[ 0 1 2 ... 12 13 14]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.arange(15)\n",
|
||||
"print(a)\n",
|
||||
"# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]\n",
|
||||
"np.set_printoptions(threshold=6)\n",
|
||||
"print(a)\n",
|
||||
"# [ 0 1 2 ... 12 13 14]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:07:14.131621Z",
|
||||
"start_time": "2020-09-06T03:07:14.126608Z"
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**打印完整的numpy数组a而不中断。**\n",
|
||||
"\n",
|
||||
"【知识点:输入和输出】\n",
|
||||
"- 如何打印完整的numpy数组而不中断?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:07:47.868079Z",
|
||||
"start_time": "2020-09-06T03:07:47.863126Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[ 0 1 2 ... 12 13 14]\n",
|
||||
"[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"a = np.arange(15)\n",
|
||||
"np.set_printoptions(threshold=6)\n",
|
||||
"print(a)\n",
|
||||
"# [ 0 1 2 ... 12 13 14]\n",
|
||||
"np.set_printoptions(threshold=np.iinfo(np.int).max)\n",
|
||||
"print(a)\n",
|
||||
"# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
372
IntroductionToNumpy/numpy/输入输出/14. 输入和输出.ipynb
Normal file
372
IntroductionToNumpy/numpy/输入输出/14. 输入和输出.ipynb
Normal file
@@ -0,0 +1,372 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 输入和输出\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## numpy 二进制文件\n",
|
||||
"\n",
|
||||
"`save()`、`savez()`和`load()`函数以 numpy 专用的二进制类型(npy、npz)保存和读取数据,这三个函数会自动处理ndim、dtype、shape等信息,使用它们读写数组非常方便,但是`save()`输出的文件很难与其它语言编写的程序兼容。\n",
|
||||
"\n",
|
||||
"npy格式:以二进制的方式存储文件,在二进制文件第一行以文本形式保存了数据的元信息(ndim,dtype,shape等),可以用二进制工具查看内容。\n",
|
||||
"\n",
|
||||
"npz格式:以压缩打包的方式存储文件,可以用压缩软件解压。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.save(file, arr, allow_pickle=True, fix_imports=True)` Save an array to a binary file in NumPy `.npy` format.\n",
|
||||
"- `numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')` Load arrays or pickled objects from ``.npy``, ``.npz`` or pickled files.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\test.npy'\n",
|
||||
"np.random.seed(20200619)\n",
|
||||
"x = np.random.uniform(0, 1, [3, 5])\n",
|
||||
"np.save(outfile, x)\n",
|
||||
"y = np.load(outfile)\n",
|
||||
"print(y)\n",
|
||||
"# [[0.01123594 0.66790705 0.50212171 0.7230908 0.61668256]\n",
|
||||
"# [0.00668332 0.1234096 0.96092409 0.67925305 0.38596837]\n",
|
||||
"# [0.72342998 0.26258324 0.24318845 0.98795012 0.77370715]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.savez(file, *args, **kwds)` Save several arrays into a single file in uncompressed `.npz` format.\n",
|
||||
"\n",
|
||||
"`savez()`第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为`arr_0, arr_1, …`。\n",
|
||||
"\n",
|
||||
"`savez()`输出的是一个压缩文件(扩展名为npz),其中每个文件都是一个`save()`保存的npy文件,文件名对应于数组名。`load()`自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为关键字获取数组的内容。\n",
|
||||
"\n",
|
||||
"【例】将多个数组保存到一个文件,可以使用`numpy.savez()`函数。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\test.npz'\n",
|
||||
"x = np.linspace(0, np.pi, 5)\n",
|
||||
"y = np.sin(x)\n",
|
||||
"z = np.cos(x)\n",
|
||||
"np.savez(outfile, x, y, z_d=z)\n",
|
||||
"data = np.load(outfile)\n",
|
||||
"np.set_printoptions(suppress=True)\n",
|
||||
"print(data.files) \n",
|
||||
"# ['z_d', 'arr_0', 'arr_1']\n",
|
||||
"\n",
|
||||
"print(data['arr_0'])\n",
|
||||
"# [0. 0.78539816 1.57079633 2.35619449 3.14159265]\n",
|
||||
"\n",
|
||||
"print(data['arr_1'])\n",
|
||||
"# [0. 0.70710678 1. 0.70710678 0. ]\n",
|
||||
"\n",
|
||||
"print(data['z_d'])\n",
|
||||
"# [ 1. 0.70710678 0. -0.70710678 -1. ]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"用解压软件打开 test.npz 文件,会发现其中有三个文件:`arr_0.npy,arr_1.npy,z_d.npy`,其中分别保存着数组`x,y,z`的内容。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 文本文件\n",
|
||||
"`savetxt()`,`loadtxt()`和`genfromtxt()`函数用来存储和读取文本文件(如TXT,CSV等)。`genfromtxt()`比`loadtxt()`更加强大,可对缺失数据进行处理。\n",
|
||||
"\n",
|
||||
"- `numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\\n', header='', footer='', comments='# ', encoding=None)` Save an array to a text file.\n",
|
||||
" - fname:文件路径\n",
|
||||
" - X:存入文件的数组。\n",
|
||||
" - fmt:写入文件中每个元素的字符串格式,默认'%.18e'(保留18位小数的浮点数形式)。\n",
|
||||
" - delimiter:分割字符串,默认以空格分隔。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"- `numpy.loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)` Load data from a text file. \n",
|
||||
" - fname:文件路径。\n",
|
||||
" - dtype:数据类型,默认为float。\n",
|
||||
" - comments: 字符串或字符串组成的列表,默认为# , 表示注释字符集开始的标志。\n",
|
||||
" - skiprows:跳过多少行,一般跳过第一行表头。\n",
|
||||
" - usecols:元组(元组内数据为列的数值索引), 用来指定要读取数据的列(第一列为0)。\n",
|
||||
" - unpack:当加载多列数据时是否需要将数据列进行解耦赋值给不同的变量。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】写入和读出TXT文件。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\test.txt'\n",
|
||||
"x = np.arange(0, 10).reshape(2, -1)\n",
|
||||
"np.savetxt(outfile, x)\n",
|
||||
"y = np.loadtxt(outfile)\n",
|
||||
"print(y)\n",
|
||||
"# [[0. 1. 2. 3. 4.]\n",
|
||||
"# [5. 6. 7. 8. 9.]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"test.txt文件如下:\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+00\n",
|
||||
"5.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】写入和读出CSV文件。\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\test.csv'\n",
|
||||
"x = np.arange(0, 10, 0.5).reshape(4, -1)\n",
|
||||
"np.savetxt(outfile, x, fmt='%.3f', delimiter=',')\n",
|
||||
"y = np.loadtxt(outfile, delimiter=',')\n",
|
||||
"print(y)\n",
|
||||
"# [[0. 0.5 1. 1.5 2. ]\n",
|
||||
"# [2.5 3. 3.5 4. 4.5]\n",
|
||||
"# [5. 5.5 6. 6.5 7. ]\n",
|
||||
"# [7.5 8. 8.5 9. 9.5]]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"test.csv文件如下:\n",
|
||||
"```python\n",
|
||||
"0.000,0.500,1.000,1.500,2.000\n",
|
||||
"2.500,3.000,3.500,4.000,4.500\n",
|
||||
"5.000,5.500,6.000,6.500,7.000\n",
|
||||
"7.500,8.000,8.500,9.000,9.500\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"`genfromtxt()`是面向结构数组和缺失数据处理的。\n",
|
||||
"\n",
|
||||
"- `numpy.genfromtxt(fname, dtype=float, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=''.join(sorted(NameValidator.defaultdeletechars)), replace_space='_', autostrip=False, case_sensitive=True, defaultfmt=\"f%i\", unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding='bytes')` Load data from a text file, with missing values handled as specified.\n",
|
||||
" - names:设置为True时,程序将把第一行作为列名称。\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"data.csv文件如下:\n",
|
||||
"```python\n",
|
||||
"id,value1,value2,value3\n",
|
||||
"1,123,1.4,23\n",
|
||||
"2,110,0.5,18\n",
|
||||
"3,164,2.1,19\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\data.csv'\n",
|
||||
"x = np.loadtxt(outfile, delimiter=',', skiprows=1)\n",
|
||||
"print(x)\n",
|
||||
"# [[ 1. 123. 1.4 23. ]\n",
|
||||
"# [ 2. 110. 0.5 18. ]\n",
|
||||
"# [ 3. 164. 2.1 19. ]]\n",
|
||||
"\n",
|
||||
"x = np.loadtxt(outfile, delimiter=',', skiprows=1, usecols=(1, 2))\n",
|
||||
"print(x)\n",
|
||||
"# [[123. 1.4]\n",
|
||||
"# [110. 0.5]\n",
|
||||
"# [164. 2.1]]\n",
|
||||
"\n",
|
||||
"val1, val2 = np.loadtxt(outfile, delimiter=',', skiprows=1, usecols=(1, 2), unpack=True)\n",
|
||||
"print(val1) # [123. 110. 164.]\n",
|
||||
"print(val2) # [1.4 0.5 2.1]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\data.csv'\n",
|
||||
"x = np.genfromtxt(outfile, delimiter=',', names=True)\n",
|
||||
"print(x)\n",
|
||||
"# [(1., 123., 1.4, 23.) (2., 110., 0.5, 18.) (3., 164., 2.1, 19.)]\n",
|
||||
"\n",
|
||||
"print(type(x)) \n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"print(x.dtype)\n",
|
||||
"# [('id', '<f8'), ('value1', '<f8'), ('value2', '<f8'), ('value3', '<f8')]\n",
|
||||
"\n",
|
||||
"print(x['id']) # [1. 2. 3.]\n",
|
||||
"print(x['value1']) # [123. 110. 164.]\n",
|
||||
"print(x['value2']) # [1.4 0.5 2.1]\n",
|
||||
"print(x['value3']) # [23. 18. 19.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"data1.csv文件\n",
|
||||
"```python\n",
|
||||
"id,value1,value2,value3\n",
|
||||
"1,123,1.4,23\n",
|
||||
"2,110,,18\n",
|
||||
"3,,2.1,19\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"outfile = r'.\\data1.csv'\n",
|
||||
"x = np.genfromtxt(outfile, delimiter=',', names=True)\n",
|
||||
"print(x)\n",
|
||||
"# [(1., 123., 1.4, 23.) (2., 110., nan, 18.) (3., nan, 2.1, 19.)]\n",
|
||||
"\n",
|
||||
"print(type(x)) \n",
|
||||
"# <class 'numpy.ndarray'>\n",
|
||||
"\n",
|
||||
"print(x.dtype)\n",
|
||||
"# [('id', '<f8'), ('value1', '<f8'), ('value2', '<f8'), ('value3', '<f8')]\n",
|
||||
"\n",
|
||||
"print(x['id']) # [1. 2. 3.]\n",
|
||||
"print(x['value1']) # [123. 110. nan]\n",
|
||||
"print(x['value2']) # [1.4 nan 2.1]\n",
|
||||
"print(x['value3']) # [23. 18. 19.]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"---\n",
|
||||
"## 文本格式选项\n",
|
||||
"\n",
|
||||
"- `numpy.set_printoptions(precision=None,threshold=None, edgeitems=None,linewidth=None, suppress=None, nanstr=None, infstr=None,formatter=None, sign=None, floatmode=None, **kwarg)` Set printing options.\n",
|
||||
" - `precision`:设置浮点精度,控制输出的小数点个数,默认是8。\n",
|
||||
" - `threshold`:概略显示,超过该值则以“…”的形式来表示,默认是1000。\n",
|
||||
" - `linewidth`:用于确定每行多少字符数后插入换行符,默认为75。\n",
|
||||
" - `suppress`:当`suppress=True`,表示小数不需要以科学计数法的形式输出,默认是False。\n",
|
||||
" - `nanstr`:浮点非数字的字符串表示形式,默认`nan`。\n",
|
||||
" - `infstr`:浮点无穷大的字符串表示形式,默认`inf`。\n",
|
||||
"\n",
|
||||
"These options determine the way floating point numbers, arrays and other NumPy objects are displayed.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"np.set_printoptions(precision=4)\n",
|
||||
"x = np.array([1.123456789])\n",
|
||||
"print(x) # [1.1235]\n",
|
||||
"\n",
|
||||
"np.set_printoptions(threshold=20)\n",
|
||||
"x = np.arange(50)\n",
|
||||
"print(x) # [ 0 1 2 ... 47 48 49]\n",
|
||||
"\n",
|
||||
"np.set_printoptions(threshold=np.iinfo(np.int).max)\n",
|
||||
"print(x)\n",
|
||||
"# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n",
|
||||
"# 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47\n",
|
||||
"# 48 49]\n",
|
||||
"\n",
|
||||
"eps = np.finfo(float).eps\n",
|
||||
"x = np.arange(4.)\n",
|
||||
"x = x ** 2 - (x + eps) ** 2\n",
|
||||
"print(x) \n",
|
||||
"# [-4.9304e-32 -4.4409e-16 0.0000e+00 0.0000e+00]\n",
|
||||
"np.set_printoptions(suppress=True)\n",
|
||||
"print(x) # [-0. -0. 0. 0.]\n",
|
||||
"\n",
|
||||
"x = np.linspace(0, 10, 10)\n",
|
||||
"print(x)\n",
|
||||
"# [ 0. 1.1111 2.2222 3.3333 4.4444 5.5556 6.6667 7.7778 8.8889\n",
|
||||
"# 10. ]\n",
|
||||
"np.set_printoptions(precision=2, suppress=True, threshold=5)\n",
|
||||
"print(x) # [ 0. 1.11 2.22 ... 7.78 8.89 10. ]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"- `numpy.get_printoptions()` Return the current print options.\n",
|
||||
"\n",
|
||||
"【例】\n",
|
||||
"```python\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.get_printoptions()\n",
|
||||
"print(x)\n",
|
||||
"# {\n",
|
||||
"# 'edgeitems': 3, \n",
|
||||
"# 'threshold': 1000, \n",
|
||||
"# 'floatmode': 'maxprec', \n",
|
||||
"# 'precision': 8, \n",
|
||||
"# 'suppress': False, \n",
|
||||
"# 'linewidth': 75, \n",
|
||||
"# 'nanstr': 'nan', \n",
|
||||
"# 'infstr': 'inf', \n",
|
||||
"# 'sign': '-', \n",
|
||||
"# 'formatter': None, \n",
|
||||
"# 'legacy': False\n",
|
||||
"# }\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": true
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
131
IntroductionToNumpy/numpy/随机抽样/11. 随机抽样-练习题.ipynb
Normal file
131
IntroductionToNumpy/numpy/随机抽样/11. 随机抽样-练习题.ipynb
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**创建一个形为5×3的二维数组,以包含5到10之间的随机数。**\n",
|
||||
"\n",
|
||||
"【知识点:随机抽样】\n",
|
||||
"- 如何创建随机二维数组?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2020-09-06T03:02:49.540699Z",
|
||||
"start_time": "2020-09-06T03:02:49.430660Z"
|
||||
}
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[[6 7 6]\n",
|
||||
" [5 6 5]\n",
|
||||
" [8 8 8]\n",
|
||||
" [9 8 7]\n",
|
||||
" [8 7 6]]\n",
|
||||
"[[7.17742843 9.67201535 6.03259923]\n",
|
||||
" [9.67097091 9.08662124 5.13643319]\n",
|
||||
" [7.51864734 7.7036486 7.8195777 ]\n",
|
||||
" [5.50024593 9.66330664 5.18939603]\n",
|
||||
" [8.34728051 5.3017636 6.30038456]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"x = np.random.randint(5, 10, [5, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[5 8 8]\n",
|
||||
"# [5 6 8]\n",
|
||||
"# [8 8 7]\n",
|
||||
"# [6 7 9]\n",
|
||||
"# [6 5 8]]\n",
|
||||
"\n",
|
||||
"x = np.random.uniform(5, 10, [5, 3])\n",
|
||||
"print(x)\n",
|
||||
"# [[6.73675226 8.50271284 9.66526032]\n",
|
||||
"# [9.42365472 7.56513263 7.86171898]\n",
|
||||
"# [9.31718935 5.71579324 9.92067933]\n",
|
||||
"# [8.90907128 8.05704153 6.0189007 ]\n",
|
||||
"# [8.70753644 7.75056151 5.71714203]]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python35",
|
||||
"language": "python",
|
||||
"name": "python35"
|
||||
},
|
||||
"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.6.10"
|
||||
},
|
||||
"toc": {
|
||||
"base_numbering": 1,
|
||||
"nav_menu": {},
|
||||
"number_sections": true,
|
||||
"sideBar": true,
|
||||
"skip_h1_title": false,
|
||||
"title_cell": "Table of Contents",
|
||||
"title_sidebar": "Contents",
|
||||
"toc_cell": false,
|
||||
"toc_position": {},
|
||||
"toc_section_display": true,
|
||||
"toc_window_display": false
|
||||
},
|
||||
"varInspector": {
|
||||
"cols": {
|
||||
"lenName": 16,
|
||||
"lenType": 16,
|
||||
"lenVar": 40
|
||||
},
|
||||
"kernels_config": {
|
||||
"python": {
|
||||
"delete_cmd_postfix": "",
|
||||
"delete_cmd_prefix": "del ",
|
||||
"library": "var_list.py",
|
||||
"varRefreshCmd": "print(var_dic_list())"
|
||||
},
|
||||
"r": {
|
||||
"delete_cmd_postfix": ") ",
|
||||
"delete_cmd_prefix": "rm(",
|
||||
"library": "var_list.r",
|
||||
"varRefreshCmd": "cat(var_dic_list()) "
|
||||
}
|
||||
},
|
||||
"types_to_exclude": [
|
||||
"module",
|
||||
"function",
|
||||
"builtin_function_or_method",
|
||||
"instance",
|
||||
"_Feature"
|
||||
],
|
||||
"window_display": false
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
723
IntroductionToNumpy/numpy/随机抽样/11. 随机抽样.ipynb
Normal file
723
IntroductionToNumpy/numpy/随机抽样/11. 随机抽样.ipynb
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user