{ "cells": [ { "cell_type": "markdown", "id": "5caeda55", "metadata": {}, "source": [ "# numpy" ] }, { "cell_type": "code", "execution_count": 1, "id": "852e15fe", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "np.__version__\n", "np.random.seed(0) # 设置随机数种子,确保每次之下生成同样的随机数组" ] }, { "cell_type": "code", "execution_count": 6, "id": "a61b22eb-d00e-44d9-9861-a20e9c316529", "metadata": {}, "outputs": [], "source": [ "#help(np.max)" ] }, { "cell_type": "code", "execution_count": 3, "id": "ff884cd2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on ufunc:\n", "\n", "isfinite = \n", " isfinite(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])\n", " \n", " Test element-wise for finiteness (not infinity and not Not a Number).\n", " \n", " The result is returned as a boolean array.\n", " \n", " Parameters\n", " ----------\n", " x : array_like\n", " Input values.\n", " out : ndarray, None, or tuple of ndarray and None, optional\n", " A location into which the result is stored. If provided, it must have\n", " a shape that the inputs broadcast to. If not provided or None,\n", " a freshly-allocated array is returned. A tuple (possible only as a\n", " keyword argument) must have length equal to the number of outputs.\n", " where : array_like, optional\n", " This condition is broadcast over the input. At locations where the\n", " condition is True, the `out` array will be set to the ufunc result.\n", " Elsewhere, the `out` array will retain its original value.\n", " Note that if an uninitialized `out` array is created via the default\n", " ``out=None``, locations within it where the condition is False will\n", " remain uninitialized.\n", " **kwargs\n", " For other keyword-only arguments, see the\n", " :ref:`ufunc docs `.\n", " \n", " Returns\n", " -------\n", " y : ndarray, bool\n", " True where ``x`` is not positive infinity, negative infinity,\n", " or NaN; false otherwise.\n", " This is a scalar if `x` is a scalar.\n", " \n", " See Also\n", " --------\n", " isinf, isneginf, isposinf, isnan\n", " \n", " Notes\n", " -----\n", " Not a Number, positive infinity and negative infinity are considered\n", " to be non-finite.\n", " \n", " NumPy uses the IEEE Standard for Binary Floating-Point for Arithmetic\n", " (IEEE 754). This means that Not a Number is not equivalent to infinity.\n", " Also that positive infinity is not equivalent to negative infinity. But\n", " infinity is equivalent to positive infinity. Errors result if the\n", " second argument is also supplied when `x` is a scalar input, or if\n", " first and second arguments have different shapes.\n", " \n", " Examples\n", " --------\n", " >>> np.isfinite(1)\n", " True\n", " >>> np.isfinite(0)\n", " True\n", " >>> np.isfinite(np.nan)\n", " False\n", " >>> np.isfinite(np.inf)\n", " False\n", " >>> np.isfinite(np.NINF)\n", " False\n", " >>> np.isfinite([np.log(-1.),1.,np.log(0)])\n", " array([False, True, False])\n", " \n", " >>> x = np.array([-np.inf, 0., np.inf])\n", " >>> y = np.array([2, 2, 2])\n", " >>> np.isfinite(x, y)\n", " array([0, 1, 0])\n", " >>> y\n", " array([0, 1, 0])\n", "\n" ] } ], "source": [ "help(np.isfinite)" ] }, { "cell_type": "markdown", "id": "07e125af", "metadata": {}, "source": [ "构造上三角" ] }, { "cell_type": "code", "execution_count": 7, "id": "d855de5a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0.40015721, 0.97873798],\n", " [ 0. , 0. , -0.97727788],\n", " [ 0. , 0. , 0. ]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.triu(\n", " np.random.randn(3,3),\n", " k = 1\n", ")" ] }, { "cell_type": "code", "execution_count": 8, "id": "3c4b0058", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[10, -1, 10],\n", " [10, -1, 10],\n", " [10, 10, -1]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.random.randn(3,3)\n", "np.where(a > 0.3, 10, -1)" ] }, { "cell_type": "code", "execution_count": 9, "id": "3c6c791e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.4105985 , 0.14404357, 1.45427351, 0.76103773, 0.12167502,\n", " 0.44386323, 0.33367433, 1.49407907, -0.20515826])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.flatten()" ] }, { "cell_type": "markdown", "id": "4253c9ba-ff21-4af6-8c60-99532283de52", "metadata": {}, "source": [ "## 2.1 认识一下" ] }, { "cell_type": "markdown", "id": "30e68ee4-7ca6-411f-a2aa-75b7767d005f", "metadata": {}, "source": [ "### 2.1.5 从头创建数组" ] }, { "cell_type": "code", "execution_count": 15, "id": "2bc21120-ef42-4b42-9105-34c291e9c1f7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros(10, dtype = int)" ] }, { "cell_type": "code", "execution_count": 51, "id": "093a228c-09c2-439c-a48f-bb88b2a5f901", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1., 1., 1., 1., 1.],\n", " [1., 1., 1., 1., 1.],\n", " [1., 1., 1., 1., 1.]])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.ones((3,5))" ] }, { "cell_type": "code", "execution_count": 52, "id": "d6b8f8f1-b8c8-4fd9-abb1-7ee38ac2baa8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3.14, 3.14, 3.14, 3.14, 3.14],\n", " [3.14, 3.14, 3.14, 3.14, 3.14],\n", " [3.14, 3.14, 3.14, 3.14, 3.14]])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.full((3, 5), 3.14)" ] }, { "cell_type": "code", "execution_count": 4, "id": "770662bb-edd2-4446-a64e-a32f6a9b32a5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(0, 20, 2)" ] }, { "cell_type": "code", "execution_count": 5, "id": "3e12e721-2673-499f-b0ca-960000d254c8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 2],\n", " [ 4, 6],\n", " [ 8, 10],\n", " [12, 14],\n", " [16, 18]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(0, 20, 2).reshape(5,2)" ] }, { "cell_type": "code", "execution_count": 3, "id": "dda5d488-c5ac-444a-9243-8680dc42af9e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.25, 0.5 , 0.75, 1. ])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0, 1, 5)" ] }, { "cell_type": "code", "execution_count": 5, "id": "fd59e40a-6f91-4224-b95c-cf3ce7a67f4e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,\n", " 0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,\n", " 0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,\n", " 0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,\n", " 0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,\n", " 0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,\n", " 0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,\n", " 0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,\n", " 0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,\n", " 0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1) # 默认50个" ] }, { "cell_type": "code", "execution_count": 42, "id": "e492fd8a-f297-4ad4-964b-5bc6ab41bf18", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.5488135 , 0.71518937, 0.60276338],\n", " [0.54488318, 0.4236548 , 0.64589411],\n", " [0.43758721, 0.891773 , 0.96366276]])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.random((3,3))" ] }, { "cell_type": "code", "execution_count": 45, "id": "f90d0815-9d81-4a15-8477-f55850aff6b9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.79172504, 0.52889492, 0.56804456],\n", " [0.92559664, 0.07103606, 0.0871293 ],\n", " [0.0202184 , 0.83261985, 0.77815675]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.rand(3,3)" ] }, { "cell_type": "code", "execution_count": 56, "id": "dd714178-1936-4aca-a128-1ff2c6d2fae4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.65453533, -0.81100072, -0.24174969],\n", " [ 0.4552344 , -0.87611752, 0.98558778],\n", " [ 1.11227937, 1.05456625, 1.99581551]])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.normal(0, 1, size=(3,3)) # 均值0方差1的标准正态分布" ] }, { "cell_type": "code", "execution_count": 58, "id": "f5ca4ada-c006-4a74-aec5-8bb5ab7d96b4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[9, 5, 5],\n", " [7, 2, 0],\n", " [9, 1, 6]], dtype=int32)" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.randint(0, 10, (3,3)) # 0-10的随机数" ] }, { "cell_type": "code", "execution_count": 61, "id": "63105883-0086-4a7b-bc02-cd17624c0ed4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1., 0., 0.],\n", " [0., 1., 0.],\n", " [0., 0., 1.]])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.eye(3) # 3*3单位矩阵" ] }, { "cell_type": "code", "execution_count": 64, "id": "5546ea9e-324f-4db8-9786-4fdf3cf286bd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1., 0., 0.],\n", " [0., 1., 0.],\n", " [0., 0., 1.]])" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.empty((3,3)) # 空数组,值不确定" ] }, { "cell_type": "code", "execution_count": 27, "id": "48893f75-5f44-4b5e-a01e-edef38e17b0a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0],\n", " [0, 2, 0],\n", " [0, 0, 3]])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag([1,2,3]) # " ] }, { "cell_type": "code", "execution_count": 5, "id": "a0a7a8e7-dd7b-48c0-a3eb-554b2ff21012", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 0, 0, 0],\n", " [1, 0, 0, 0],\n", " [0, 2, 0, 0],\n", " [0, 0, 3, 0]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag([1,2,3] , k=-1) # k表示对角线上下偏移" ] }, { "cell_type": "markdown", "id": "36dac25d-f819-4a93-a431-a8a682d995cf", "metadata": {}, "source": [ "对数尺度上均匀分布,默认10为底, 比如 10e-10, 10e-9。。。" ] }, { "cell_type": "code", "execution_count": 4, "id": "32e39946-b60e-469b-acff-4ea9b231d528", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.00000000e-10, 1.12883789e-09, 1.27427499e-08, 1.43844989e-07,\n", " 1.62377674e-06, 1.83298071e-05, 2.06913808e-04, 2.33572147e-03,\n", " 2.63665090e-02, 2.97635144e-01, 3.35981829e+00, 3.79269019e+01,\n", " 4.28133240e+02, 4.83293024e+03, 5.45559478e+04, 6.15848211e+05,\n", " 6.95192796e+06, 7.84759970e+07, 8.85866790e+08, 1.00000000e+10])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.logspace(-10, 10, 20) " ] }, { "cell_type": "markdown", "id": "d5e739cd-d65d-4609-a45e-56038154f8ba", "metadata": {}, "source": [ "### 2.1.6 np.nan\n", "表示缺失或者未定义。\n", "- 是一个特殊浮点\n", "- 任何设计nan运算都是nan(false)\n", "- isnan检查数组NaN" ] }, { "cell_type": "code", "execution_count": 14, "id": "c8e48298-b70b-4fd4-ad3f-4a1a4be20d10", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "float" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(np.nan)" ] }, { "cell_type": "code", "execution_count": 15, "id": "3f66a7b0-2945-452d-9fc8-3019b50379ec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n" ] } ], "source": [ "print(np.nan == np.nan)" ] }, { "cell_type": "code", "execution_count": 5, "id": "f4f1750b-eb53-4cb9-8446-479c4979d347", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([False, True, False])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.array([0, np.nan, 1])\n", "np.isnan(arr)" ] }, { "cell_type": "markdown", "id": "609aa415-bacc-4c66-b148-b0c666cb163c", "metadata": {}, "source": [ "基础处理nan" ] }, { "cell_type": "code", "execution_count": 6, "id": "4b0eacba-4943-4339-952d-a2c103155dc1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0., 0., 1.])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.nan_to_num(arr)" ] }, { "cell_type": "markdown", "id": "72025c5c-cc72-4b64-8363-719facde8630", "metadata": {}, "source": [ "nan友好函数,即忽略nan进行计算" ] }, { "cell_type": "code", "execution_count": 17, "id": "9e58d7cf-a6d9-4c4d-acf1-48dc7bdbc031", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(1.0)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.nansum(arr)" ] }, { "cell_type": "markdown", "id": "e8bc87ad-83ce-462d-9c46-28ecc4f35a69", "metadata": {}, "source": [ "### 2.1.7 np.inf" ] }, { "cell_type": "code", "execution_count": null, "id": "6d671215-e562-4eeb-9aa7-ab523c0276c0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "17cd0ed8-f157-42c3-8efe-8dfd05b80250", "metadata": {}, "source": [ "## 2.2 numpy数组基础\n", "\n", "- 数组的属性:确定数组的大小、形状、存储大小、数据类型。\n", "- 数组的索引:获取和设置数组各个元素的值。\n", "- 数组的切分:在大的数组中获取或设置更小的子数组。\n", "- 数组的变形:改变给定数组的形状。\n", "- 数组的拼接和分裂:将多个数组合并为一个,以及将一个数组分裂成多个。" ] }, { "cell_type": "markdown", "id": "3aac8157-b0f2-4810-a987-b0041f464281", "metadata": {}, "source": [ "### 2.2.1 NumPy数组的属性\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "4cefbe61-932d-4c07-a9c1-a889f449661b", "metadata": {}, "outputs": [], "source": [ "x1 = np.random.randint(10, size = 6)\n", "x2 = np.random.randint(10, size = (3, 4)) # 二维数组\n", "x3 = np.random.randint(10, size = (3, 4, 5)) # 三维数组" ] }, { "cell_type": "code", "execution_count": 56, "id": "55419bde-58ef-4729-8396-4638698affe4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x3 ndim : 3\n", "x3 shape : (3, 4, 5)\n", "x3 size : 60\n", "x3 dtype : int32\n", "x3 itemsize : 4 bytes\n", "x3 nbytes : 240 bytes\n" ] } ], "source": [ "print(\"x3 ndim : \", x3.ndim) # 数组维度\n", "print(\"x3 shape : \", x3.shape) # 数组形状\n", "print(\"x3 size : \", x3.size) # 数组总共的size\n", "print(\"x3 dtype : \", x3.dtype) # 数组元素类型\n", "print(\"x3 itemsize : \", x3.itemsize, \"bytes\") # 数组每元素 字节数\n", "print(\"x3 nbytes : \", x3.nbytes, \"bytes\") # 数组总 字节数\n" ] }, { "cell_type": "markdown", "id": "3f0af6af-64de-4c21-b08d-03a7522de764", "metadata": {}, "source": [ "### 2.2.2 数组索引" ] }, { "cell_type": "code", "execution_count": 9, "id": "7faa1ef7-70d8-44fa-bd03-d5a27b506a72", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5, 0, 3, 3, 7, 9], dtype=int32)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1" ] }, { "cell_type": "code", "execution_count": 11, "id": "12a5f16e-f5a8-431e-ab94-2a1e52045c1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int32(5)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1[0]" ] }, { "cell_type": "code", "execution_count": 12, "id": "abd1e0a0-1cbb-4b23-8bed-4ce867a14695", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int32(9)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1[-1]" ] }, { "cell_type": "markdown", "id": "be1a5f7c-8a3f-4ef1-a7f4-ebead0766d56", "metadata": {}, "source": [ "多维数组中通过 逗号分割的索引元组" ] }, { "cell_type": "code", "execution_count": 17, "id": "48d46ae1-7ecc-44f5-86f8-1adf71c0cb7b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int32(3)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[0, 0]" ] }, { "cell_type": "code", "execution_count": 19, "id": "049cea1a-446e-4cea-898e-3381074d2bc2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[12, 5, 2, 4],\n", " [ 7, 6, 8, 8],\n", " [ 1, 6, 7, 7]], dtype=int32)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[0, 0] = 12\n", "x2" ] }, { "cell_type": "markdown", "id": "b067fb79-22a0-4f10-baa9-88974cf2cf52", "metadata": {}, "source": [ "注意!! np数组类型是固定的!!! 所以如果修改其他元素类型 会强制转换\n", "\n" ] }, { "cell_type": "code", "execution_count": 31, "id": "d5ef2e8d-607c-4250-baa2-493a7a397f24", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'x2' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[31], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mx2\u001b[49m[\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m3.14\u001b[39m\n\u001b[0;32m 2\u001b[0m x2\n", "\u001b[1;31mNameError\u001b[0m: name 'x2' is not defined" ] } ], "source": [ "x2[0, 0] = 3.14\n", "x2" ] }, { "cell_type": "markdown", "id": "76dea1c6-1b81-4353-ad35-eb13b5527546", "metadata": {}, "source": [ "找到扁平化索引对应的原来索引" ] }, { "cell_type": "code", "execution_count": null, "id": "0a68beda-076c-4729-8629-b204a2325505", "metadata": {}, "outputs": [], "source": [ "shape = (6,7,8)\n", "index = 99 # find flat\n", "x = index // (shape[1] * shape[2])\n", "y = (index % (shape[1] * shape[2])) // shape[2]\n", "z = index % shape[2]\n", "print(f\"Index of the 100th element (0-based) is: ({x}, {y}, {z})\")\n" ] }, { "cell_type": "markdown", "id": "b9059548-548c-47fe-ae73-adc4a5c342ee", "metadata": {}, "source": [ "### 2.2.3 数组切片:获取子数组\n", "- x[start:stop:step] \n", "- 右开\n", "- 默认值为0, 维度大小, 1" ] }, { "cell_type": "code", "execution_count": 3, "id": "4b92412b-fa95-4edd-8648-5cd98eeed4f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(10)\n", "x" ] }, { "cell_type": "code", "execution_count": 4, "id": "7feee1b6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[:-1]" ] }, { "cell_type": "code", "execution_count": 26, "id": "2c90add5-dc24-48ae-be49-2839c6d3d016", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[: 5]" ] }, { "cell_type": "code", "execution_count": 27, "id": "ea9f6bb4-5059-4faa-b1d1-e05e0e15dbc6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5, 6, 7, 8, 9])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[5: ]" ] }, { "cell_type": "code", "execution_count": 28, "id": "d50cd1b0-385d-4518-ad20-b1a4274432ad", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 5, 6])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[4: 7]" ] }, { "cell_type": "code", "execution_count": 29, "id": "9e065685-29ea-4641-bd66-b97bce620953", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 2, 4, 6, 8])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[: : 2]" ] }, { "cell_type": "code", "execution_count": 30, "id": "82f22d19-2caa-4c0c-b98e-3e3bf1ea03d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 3, 5, 7, 9])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[1: : 2]" ] }, { "cell_type": "code", "execution_count": 31, "id": "447948a3-ae58-42c2-b625-334a80c54d52", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[: : -1]" ] }, { "cell_type": "code", "execution_count": 32, "id": "0b844a06-36b0-41fc-9421-a51d5c724e29", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5, 3, 1])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[5: : -2]" ] }, { "cell_type": "markdown", "id": "dc6bdacd-27e1-4128-b079-41b14e5e6660", "metadata": {}, "source": [ "2. 多维" ] }, { "cell_type": "code", "execution_count": 33, "id": "ad803ae2-60a0-45f3-bdad-09613d6157fd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3, 5, 2, 4],\n", " [7, 6, 8, 8],\n", " [1, 6, 7, 7]], dtype=int32)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2" ] }, { "cell_type": "code", "execution_count": 34, "id": "51fcf68a-da19-4e0f-94e4-b06e84c049a5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3, 5, 2],\n", " [7, 6, 8]], dtype=int32)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[:2 , :3] # 前两行, 前三列" ] }, { "cell_type": "code", "execution_count": 36, "id": "22f8cbff-a373-4fef-a0fb-91cfc35939c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3, 2],\n", " [7, 8],\n", " [1, 7]], dtype=int32)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[:3, : : 2] # 前三行, 列隔2" ] }, { "cell_type": "code", "execution_count": 37, "id": "d9256db8-c763-44ad-bdd5-ca0eaa5cf36c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 7, 6, 1],\n", " [8, 8, 6, 7],\n", " [4, 2, 5, 3]], dtype=int32)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[: : -1, : : -1] # 翻转行 列" ] }, { "cell_type": "markdown", "id": "ae8c6502-2800-4ec0-a1ab-58bf734e6ae2", "metadata": {}, "source": [ "3. 获取数组单行 单列\n", "- 通过 空切片和索引\n", "- : 表示空切片," ] }, { "cell_type": "code", "execution_count": 39, "id": "adbb93ec-8fdc-430a-b27b-f4e491904dbc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 7, 1], dtype=int32)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[:, 0] # 第一列: 行空切片保留,列索引获取" ] }, { "cell_type": "code", "execution_count": 41, "id": "cb7e808f-a82f-4415-b0f6-a38020c224e2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 5, 2, 4], dtype=int32)" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[0, :] # 第一行" ] }, { "cell_type": "code", "execution_count": 42, "id": "f8e4f6c9-97c6-46c9-8fda-c3914678caa5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 5, 2, 4], dtype=int32)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2[0] # 行做法" ] }, { "cell_type": "markdown", "id": "9a5cd345-f918-4e0d-bef9-27349fc060a6", "metadata": {}, "source": [ "4. np数组切片返回的是数组数据的视图\n", "- ,不是副本, 即会修改元数据,与python列表切片不同" ] }, { "cell_type": "code", "execution_count": 43, "id": "67eb4fa7-61a2-4010-aac3-58bafe334ad0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3, 5, 2, 4],\n", " [7, 6, 8, 8],\n", " [1, 6, 7, 7]], dtype=int32)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2" ] }, { "cell_type": "code", "execution_count": 45, "id": "bafc9c90-9145-4cfe-8de8-0b117a9d8fdd", "metadata": {}, "outputs": [], "source": [ "x2_sub = x2[:2, :2]" ] }, { "cell_type": "code", "execution_count": 47, "id": "914d62c1-7060-4067-91b7-ccad96978afa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[99, 5],\n", " [ 7, 6]], dtype=int32)" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2_sub[0, 0] = 99\n", "x2_sub" ] }, { "cell_type": "code", "execution_count": 48, "id": "4e1e912a-edf4-4ca6-887b-174d5b7d5795", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[99, 5, 2, 4],\n", " [ 7, 6, 8, 8],\n", " [ 1, 6, 7, 7]], dtype=int32)" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2" ] }, { "cell_type": "markdown", "id": "d168a967-6fe3-48c1-aeb8-9ac454bb059e", "metadata": {}, "source": [ "5. copy明确复制创建副本" ] }, { "cell_type": "code", "execution_count": 50, "id": "23c2a5e8-ba28-4a79-baf0-435742c4ce27", "metadata": {}, "outputs": [], "source": [ "x2_sub_copy = x2[:2, :2].copy()" ] }, { "cell_type": "code", "execution_count": 54, "id": "f3057900-b9b0-4185-a858-083d6abad76f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[22, 5],\n", " [ 7, 6]], dtype=int32)" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2_sub_copy[0, 0] = 22\n", "x2_sub_copy # 是副本,所以原数组不变" ] }, { "cell_type": "code", "execution_count": 55, "id": "718c5ea0-955e-4a29-8ed0-f12930efb56d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[99, 5, 2, 4],\n", " [ 7, 6, 8, 8],\n", " [ 1, 6, 7, 7]], dtype=int32)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x2" ] }, { "cell_type": "markdown", "id": "609f6a5c-5e3d-4815-8834-60e35452a977", "metadata": {}, "source": [ "### 2.2.4 数组变形\n", "1. reshape\n", "2. newaxis" ] }, { "cell_type": "code", "execution_count": 1, "id": "6917bf85-ab89-41a8-b38f-b64d1969bcb5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3]])" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "x = np.array([1,2,3])\n", "x.reshape((1,3))" ] }, { "cell_type": "code", "execution_count": 2, "id": "2b288ba6-1d32-46f9-8a51-7eb4c2b1fce7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3]])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[np.newaxis, :] # newaxis转化为行向量" ] }, { "cell_type": "code", "execution_count": 3, "id": "00acb309-0102-47ad-8dc2-fcd3dfab3cc4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1],\n", " [2],\n", " [3]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[:, np.newaxis] # newaxis转化为列向量" ] }, { "cell_type": "code", "execution_count": 13, "id": "33936a7a-5413-44b0-a908-a0d2084fd90a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 2],\n", " [ 4, 6],\n", " [ 8, 10],\n", " [12, 14],\n", " [16, 18]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(0, 20, 2).reshape(5,2)\n", "x" ] }, { "cell_type": "markdown", "id": "c03efd40-f569-4287-bbbd-161675200900", "metadata": {}, "source": [ "扁平化\n", "- 如果只想变成一维,不修改数据 → ravel()(更快)\n", "- 如果需要独立副本,确保不影响原数组 → flatten()(更安全)" ] }, { "cell_type": "code", "execution_count": 11, "id": "49080e33-e002-4b18-af57-1c861312e357", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.ravel()" ] }, { "cell_type": "code", "execution_count": 12, "id": "711127d2-9ce4-4441-85b7-6da7e2b317b8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.flatten()" ] }, { "cell_type": "markdown", "id": "d77a6cbd-c770-4682-9f31-8986967a6173", "metadata": {}, "source": [ "### 2.2.5 数组拼接分裂" ] }, { "cell_type": "markdown", "id": "c18a1856-1762-4ea8-b423-ca8029e75a2d", "metadata": {}, "source": [ "#### 1. 数组拼接" ] }, { "cell_type": "code", "execution_count": 8, "id": "7d3467d8-1bc7-4ca8-be7c-2f47be634629", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 2, 3, 5, 2, 1, 9])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([1, 2, 3])\n", "y = np.array([2, 3, 5])\n", "z = np.array([2, 1, 9])\n", "np.concatenate([x, y, z])" ] }, { "cell_type": "code", "execution_count": 3, "id": "9b569942-8fab-4b37-83da-7a1365ed38a5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3, 1, 2, 3],\n", " [4, 5, 6, 4, 5, 6]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = np.array([\n", " [1, 2, 3],\n", " [4, 5, 6]\n", "])\n", "np.concatenate([grid, grid]) # 行拼接\n", "np.vstack([grid, grid])\n", "\n", "np.concatenate([grid, grid], axis = 1) # 列拼接\n", "np.hstack([grid, grid])\n" ] }, { "cell_type": "code", "execution_count": 9, "id": "cf68f6ff-e929-4537-954e-15cf2fc1d51f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1. , -0.5])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 网格点\n", "x = np.linspace(-1, 1, 5)\n", "y = np.linspace(-1, 1, 5)\n", "x, y = np.meshgrid(x, y)\n", "points = np.dstack((x, y))\n", "points[1, 0]" ] }, { "cell_type": "markdown", "id": "938f4496-1b4a-4faa-9cbf-489ec619225a", "metadata": {}, "source": [ "#### 2. 数组分裂" ] }, { "cell_type": "code", "execution_count": 24, "id": "d0fc0b0b-982d-4195-b2e6-d42f0baa7449", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([i for i in range(5)])\n", "x1, x2, x3 = np.split(x, [1, 3]) # 2个分裂点产生3个数组\n", "\n", "grid = np.arange(16).reshape((4,4))\n", "g1, g2 = np.vsplit(grid, [2])\n", "g2" ] }, { "cell_type": "markdown", "id": "466dbe40-be21-4fbb-8f3f-9a8c6735b29c", "metadata": {}, "source": [ "3. 数组重复" ] }, { "cell_type": "code", "execution_count": 34, "id": "4cec46c5-35e2-4cf7-bbd7-7f3fff6903e1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2, 0, 1, 2, 0, 1, 2],\n", " [3, 4, 5, 3, 4, 5, 3, 4, 5],\n", " [6, 7, 8, 6, 7, 8, 6, 7, 8],\n", " [0, 1, 2, 0, 1, 2, 0, 1, 2],\n", " [3, 4, 5, 3, 4, 5, 3, 4, 5],\n", " [6, 7, 8, 6, 7, 8, 6, 7, 8]])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(9).reshape(3,3)\n", "tiled = np.tile(arr, (2,3)) # 行方向重复两次, 列方向重复3次\n", "tiled" ] }, { "cell_type": "markdown", "id": "7fb7f2be-6f90-4bef-9617-0a5560ca7ccf", "metadata": {}, "source": [ "## 2.3 numpy数组计算 函数" ] }, { "cell_type": "markdown", "id": "ce5cbd14-8921-4176-a4b8-b5c3c08208ff", "metadata": {}, "source": [ "axis = 0 表示跨行计算。 即按列计算。 如 `mean, sum, std`" ] }, { "cell_type": "markdown", "id": "b2631bff-f50d-4cdb-983d-c6a84e840981", "metadata": {}, "source": [ "### 2.3.1 缓慢循环\n" ] }, { "cell_type": "code", "execution_count": 31, "id": "ed9bc6b0-be02-4733-a7d4-b1c6d4fd1d0c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.85 ms ± 45.9 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "def compute_reciprocals(values):\n", " output = np.empty(len(values))\n", " for i in range(len(values)):\n", " output[i] = 1.0 / values[i]\n", " return output\n", "\n", "values = np.random.randint(1, 100, size = 1000000)\n", "%timeit compute_reciprocals(values)\n", "%timeit 1.0 / values" ] }, { "cell_type": "markdown", "id": "8ffe3df6-cf82-4fc1-a564-5b2a0597ccb8", "metadata": {}, "source": [ "### 2.3.2 通用函数(np 快速函数)" ] }, { "cell_type": "code", "execution_count": 2, "id": "0cad4cf8-6647-41ea-8604-8532752c01ad", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0.84147098, 0.90929743],\n", " [ 0.14112001, -0.7568025 , -0.95892427],\n", " [-0.2794155 , 0.6569866 , 0.98935825]])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "np.arange(5) / np.arange(1, 6)\n", "x = np.arange(9).reshape((3,3))\n", "2 ** x\n", "np.sin(x)" ] }, { "cell_type": "code", "execution_count": 4, "id": "ce6de08f-441a-4a30-a486-06b18b381ba6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3.25 5.5 7.75]\n" ] } ], "source": [ "data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n", "percentiles = np.percentile(data, [25, 50, 75]) # 分位数\n", "print(percentiles) # 输出: [3.25, 5.5, 7.75]" ] }, { "cell_type": "code", "execution_count": 5, "id": "f7f58381-1818-4890-a496-f8e335d37a8f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2.5 3.5 4.5]\n" ] } ], "source": [ "data = np.array([[1, 2, 3], [4, 5, 6]])\n", "p50 = np.percentile(data, 50, axis=0) # 按列计算中位数\n", "print(p50) # 输出: [2.5, 3.5, 4.5]" ] }, { "cell_type": "markdown", "id": "117ddb1f-cdea-41c5-8658-36e8896503f9", "metadata": {}, "source": [ "#### 高阶数学计算" ] }, { "cell_type": "code", "execution_count": 38, "id": "699dc32e-a734-45ab-8f68-b5163ad16a0c", "metadata": {}, "outputs": [], "source": [ "from scipy import special" ] }, { "cell_type": "code", "execution_count": 14, "id": "775b4df5-552c-417f-9878-3d118f3d0ef8", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'special' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[14], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# 误差函数(高斯积分)\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;66;03m# 它的实现和它的逆实现\u001b[39;00m\n\u001b[0;32m 3\u001b[0m x \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray([\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0.3\u001b[39m, \u001b[38;5;241m0.7\u001b[39m, \u001b[38;5;241m1.0\u001b[39m])\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124merf(x) =\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[43mspecial\u001b[49m\u001b[38;5;241m.\u001b[39merf(x))\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124merfc(x) =\u001b[39m\u001b[38;5;124m\"\u001b[39m, special\u001b[38;5;241m.\u001b[39merfc(x))\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124merfinv(x) =\u001b[39m\u001b[38;5;124m\"\u001b[39m, special\u001b[38;5;241m.\u001b[39merfinv(x))\n", "\u001b[1;31mNameError\u001b[0m: name 'special' is not defined" ] } ], "source": [ "# 误差函数(高斯积分)\n", "# 它的实现和它的逆实现\n", "x = np.array([0, 0.3, 0.7, 1.0])\n", "print(\"erf(x) =\", special.erf(x))\n", "print(\"erfc(x) =\", special.erfc(x))\n", "print(\"erfinv(x) =\", special.erfinv(x))" ] }, { "cell_type": "markdown", "id": "045d27ee-f36e-44d4-8352-c4df27bed68c", "metadata": {}, "source": [ "最大" ] }, { "cell_type": "code", "execution_count": 17, "id": "e6a00443-348a-4d57-b477-ab2896084b02", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(1.585061536053887)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x=[1,2,3]\n", "y=[2,3,5]\n", "z= np.random.randn(2,3)\n", "np.maximum(x, y)\t#逐元素 取最大值(两个数组 对应位置比较)\n", "np.max(x)\t#整体 取最大值(整个数组 或指定 axis)\n", "np.max(z) " ] }, { "cell_type": "code", "execution_count": null, "id": "9537fb08-f693-4ed3-93fd-b973b5f9c798", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6b352930-1694-4725-bea5-47cd7be30542", "metadata": {}, "source": [ "### 2.3.4 通用函数特性\n", "1. 指定输出:运算需要临时一个数组存放。所有通用函数都支持的。\n", "2. 聚合结果。\n", " - reduce对元素执行重复操作\n", " - accumulate存储中间计算结果计算\n", "3. 外积:outer" ] }, { "cell_type": "code", "execution_count": 10, "id": "a64eadca-8c6c-470d-b673-bb5b06a6ae9c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 10. 20. 30. 40.]\n" ] } ], "source": [ "x = np.arange(5)\n", "y = np.empty(5)\n", "np.multiply(x, 10, out = y)\n", "print(y)" ] }, { "cell_type": "code", "execution_count": 13, "id": "90c50d61-e003-4dd7-afa7-f19a88801fe8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 6, 24, 120])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(1, 6)\n", "np.add.reduce(x)\n", "np.multiply.reduce(x)\n", "\n", "np.add.accumulate(x)\n", "np.multiply.accumulate(x)" ] }, { "cell_type": "code", "execution_count": 14, "id": "2d399c50-5c1a-44f6-a16b-4b5739fafce7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3, 4, 5],\n", " [ 2, 4, 6, 8, 10],\n", " [ 3, 6, 9, 12, 15],\n", " [ 4, 8, 12, 16, 20],\n", " [ 5, 10, 15, 20, 25]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.multiply.outer(x, x)" ] }, { "cell_type": "markdown", "id": "6e92aee6", "metadata": {}, "source": [ "### 2.3.5 统计" ] }, { "cell_type": "code", "execution_count": null, "id": "7cf01252", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "id": "8625e3e5", "metadata": {}, "outputs": [], "source": [ "x = np.random.randn(3)\n", "y = np.random.randn(3)\n", "print(corr_func(x, y))" ] }, { "cell_type": "markdown", "id": "a556b3c7", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "11a961f4", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "ee91a27a-cd38-4fd7-8dcf-894352a75423", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "## 2.4 聚合最大最小\n", "> 之前提到通用函数会比内置快. " ] }, { "cell_type": "code", "execution_count": 23, "id": "98a16d86-6656-4f45-9e44-30ab4ced466b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.24617237210136012)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.random(10)\n", "sum(x) # py内置\n", "np.sum(x) # \n", "x.sum() # 两种都行\n", "\n", "min(x)\n", "np.min(x)\n", "x.min()" ] }, { "cell_type": "markdown", "id": "0d148781-96a2-43cc-a4fd-8f6447ee48d0", "metadata": {}, "source": [ "## 2.5 数组的计算:广播" ] }, { "cell_type": "markdown", "id": "6937e286-e306-431a-8c0e-17ce1717d55c", "metadata": {}, "source": [ "> - np通用函数通过向量化操作减少缓慢的python循环\n", "> - 广播通过向量化操作实现不同大小数组的快速计算 " ] }, { "cell_type": "code", "execution_count": 29, "id": "d4d6cb5c-8ecd-40b2-8525-bec389c0e20d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1., 2., 3.],\n", " [1., 2., 3.],\n", " [1., 2., 3.]])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(5)\n", "x + 5\n", "x = np.zeros((2,5))\n", "x + 5\n", "np.ones((3, 3)) + np.arange(3)\n", "np.ones((3, 1)) + np.arange(3)" ] }, { "attachments": { "8c33cb09-bfe6-4c0f-8168-616e264fd686.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3QAAAM5CAIAAADANOReAAAgAElEQVR4Aey9748jR37f3w91AEUckEEyRkIHh0xgIsbXiDgHybgoACe3PgseW5NzIh7OuRvIEwsbhWBsr5QwGWygBa2TeECGieA1JifG8u3G8ZEybpOsQTlHnQAFKwVBVgPcgwXynM/zN/B7u6V932erqovV7KpmN+fNB7s11cX68f58qurF6urqZMkPFaACVIAKUAEqQAWoABUIpEASKB9mQwWoABWgAlSAClABKkAFloRLOgEVoAJUgApQASpABahAMAUIl8GkZEZUgApQASpABagAFaAChEv6ABWgAlSAClABKkAFqEAwBQiXwaQsIKPpdNpqtQ4ODhaLRabihsNhq9U6OjrK9C0mpgJUgApQASpABahAVgUIl1kV22T63d3dJElOT0+1SiwWi+mjz8XFhXZJ/blYLNR3h8OhNQEjqQAVoAJUgApQASoQRAHCZRAZi8hkOBwmSbK7uysLOz8/b7Vaifjs7u6en5/LNCqsvl6v17OueppZpcXM53NRkSeCrVYr7VuMpwJUgApQASpABbZJAcJlZaxpLlsuFosnCE78YV2hrNfrSZJYLwVRYTqdiio8ESRcBlGYmVABKkAFqAAVKL8ChMvy2+hhDc/PzxWsaeuOe3t7R0dH5+fn0+n0/Px8b29PJbOuUB4fH5trnwHb3+12Veld4xOPaAPWn1lRASpABagAFaAC+RUgXObXsIgcjo6OkiQ5ODjQCtNYc7lcqgVO69ZM3Laez+daPkH+VPBar9eD5MZMqAAVoAJUgApQgSoqQLishtX872irvZVWEgV6drtdz2YfHx+3Wi1PGFW7P3kH3FNbJqMCVIAKUAEqsJUKhIHL+Xw+nU7NVTSrZOq5ZuulTJEXFxcqK89y1SPVWmJV8+l06lm0KjTtoWyZyXQ69WSy5XKpqpGWLfYy+mSIxFbIOzg4SJJkb29PVtURVrzoqY+6KX98fOzIkJeoABWgAlSAClCB7VZgHbjE1jq1FxD3YZMkMcFCS6xW4JIkqdfr6+3DWywW3W5XFpokSavVMskM+/+WyyWqoTjp4uLi6OgIlVEpj4+PNfQEqClSlM9lt1otLTEcZTgconq7u7vz+RylIw0C0+kUiVVDzGzV1z1vN6POpi2Wy+Xp6alqLCrgDmSCSym4O1tepQJUgApQASpABbZVgVxwiadMFFUA0aRY4CprYs8lMZlh2iPS5iMsYB3UIUkSVaK1MortZFkAteFwqJFo2vof7kpDk729PbVemCS62tZqmMuK6uvWlUhZWxVWuzOTJLEeSIQWeSrvD5cXFxeqyZ45mzVnDBWgAlSAClABKrAFCui449MksFr90Wc4HE6nU0QmSSIXEWW8Wq1Ur5lRIKKd2uhT+nK5PDo6wqrnxcUFHpHWthKqInC1Xq/L7YOtVgsYNJ1OwY6IXC6XQDF1tdvtTqdTCZqohqo5npip1+unp6fT6RRYqSojG3hxcaGy3dvbU6uV4ELtmHT/281A2zQSBZprNZcVk2F/uIRWyh9kJgxTASpABagAFaACl0eBXHCJhUClF+4aSzaScCm5DfeCPSnHYRIgnYaqiufUvyvffIj7xTIlgClJEkmuaJT2+DZQUioAWbSVS6CkZHEli7UhsgKmGvP5XD2srZZUzXvr+IoSxJ0bEvvDJQSE7AcHB9LiyJMBKkAFqAAVoAJUYIsVyAWX2g1cLJtJPgOHpSXW+Gw9rbHuKKEKlJO2jCfLAqHKekq4lDnjFrCkQCwKykh5RKUGl6rOWvMBiJI4VUPSKFxWUm17lVWVbVRhxa/WHZlmYn+4hKEhuwpIzjbzZwwVoAJUgApQASqwZQrkgktt9QuUI2EOzKElTkOx9fTF6qBcKgPlWHcfmgUhPS5ZW6SumomxgdLkNjMxctZkQSZoCFIiBtVTASRQpaS9/hHfUlpJG+GSGfCHSxDtYrHQXkrpqb9ZOmOoABWgAlSAClCByimwMbjEmYvaet4aCk6nU2yslAQGpAP3pGWuTilCeiQDt5koZiYGRptrdY7EssJylyegE3XQUqKSqvLn5+e4z67dxEdKFYgEl1opamusavju7u5KE5hfZwwVoAJUgApQASpQRQU2CZdYbvQ5vlETd7FYnJ6egilBb5LAEKl9F39eXFwcHx9j96eZHmDnA5dgO1kHVZaZM25/7+3ttcQHLfKHSzRHnZeJHQJmNVRKEy7n87mowhNBPHL0ROzjP8w1WlkZ+fuBi5eaMvyTClABKkAFqMC2KlAKuEzDoDTR5/O5SYQK4GRWJtLJDOVD30ipAkiWCS7ByrIOKivkj5yRGJe0wHpwuVwusfNV282pFS1xGc3U6rDyT5kJ8pcBrOaiOfIqw1SAClABKkAFqMD2KVA9uJzP51ic63a7atUTrCbBDmxkmg0Epk5HUk/PmOlBXSZFmYmtdVBFOxIfHR11bR80BHVAjNkcLQb6aPHqT1VPiZ7qxrp63ZH2r1pJVccqaZd8XkGEypsCWuvGSCpABagAFaACVKDqClQPLnHjWN5ptYKdiXTKWjhgsl6vmw9lyz2gDjYyM7fWQZWYKbHmUnjyKe1pcS39crl01AS3qj2XElVW/lyrVcYhoJaSf1IBKkAFqAAVoALbocAm4RKY6C8lDgzSVsKsOGUinSoIJzJqgGWmd7CRmRi3gE0KdCSWiJymg/q6Vtu0xCvhMlNuoeBy5e5MR3N4iQpQASpABagAFaiQApuES0U5nq/MVpqmcWEmuMRR59qCnImAmeAyrW7L5dLM2ZHY9J5MJ1Mul0tQu/mMNtZBfaAWnKoJZdYwLQbAbT5Bn/YVxlMBKkAFqAAVoAKVVqA4uJSb/OSZO1q8W03AiraMlwkurYmtCJgJLrGqKo9hV09wm3CZltja/EzvFrce8I5s0SLPJ/RzrlziuSu5/QCVYYAKUAEqQAWoABXYPgWKg0vtneM4uAc3kefz+cGjj7neBt3xII58CRBW47TXUZpIp/Ixi057jw5QTLsLbyVRbGfUqoFTh+RuzrTEaKkMKKT2XOLFuqzG3ypDrJjK/B3hPHCJXwKZfj84KsNLVIAKUAEqQAWoQPkVKBQu9/b2FDgCcer1OlASN3MlOGoKYlmuXq9j7Q2wqFFdGlyCUFGfxWKB0iUCZoVL5Fyv19WtZLRUVUY2By/jkW1ZLpeLxQJNU+lRDS3+9PS02+1iUfDi4gJkqT2rhHJVAn/a84TL8/NzPLm/XC7VAaKqyWk1QZUYoAJUgApQASpABbZJgeLgEndIwXxJksidf4g3lwml4lgIrNfrrVZLZQs0lLsDkaH8ugoj/e7ubqvVqj/6oIZID6ozq5SWOe65I4GMQc4qILEYp6lb36+jThfSdi7KnFFckiRAW6245XJpzcdMhhhPuJQN8awJimCAClABKkAFqAAV2CYFioPLbrcrEUQdMCmlxFXcKJdXEV4sFhpUDR99FNN4wqV2DLtaO0QFUNYacLlYLIC/SZK0Wi151x45I4B7x5LJzLVbVTeNcVFh+d1Wq6UtcKIsNAeLnbiUFvCES2srHDVJK47xVIAKUAEqQAWoQNUVWAcuLy4u1HnaGqPgLG4JN8AOtQVwOp12u93T01PcDZcKDodDuZYpL2nh+Xyu8lF1QNGySjj0W/su/lQ3c4fDoaoM2oW6IVvZIvV1d+bqi6iMgr+0TZOLxWI4HKqT1IfDIb6FesotodrVxWKhWiHVkF+UYSuhygRmeD6fT6dTCGImQIxWE1MxpGSAClABKkAFqAAV2GIF1oHLTHJocJnpu1uTWMGltu6YtXXqrr31MR2frBaLhbon7l4Y9smKaagAFaACVIAKUAEqkKYA4TJNmWDxuBnt/xiNtWz1tJB8BMqaLC1SUf7u7m5aAsZTASpABagAFaACVCC/AoTL/BquyAFrt9rjOCu+Zru89uIlli09dx3YCmccFaACVIAKUAEqQAVWK0C4XK1RnhSgOu2Yz/XynE6nrVbr4ODAZxOkLGI4HLZaLfM5IZmGYSpABagAFaACVIAK5FeAcJlfw5/loFDy+Pj4/Px8Op2enp6qbY5JkvDl2j+TiSEqQAWoABWgAlRgexUgXIa0LQ5Rl2cDJUnCJcOQKjMvKkAFqAAVoAJUoMQKRIdLdfZQt9uVJ1CWWJBcVbu4uOh2uzjaXd2JvgwNz6Uav0wFqAAVoAJUgApskQLR4XKLtGJTqAAVoAJUgApQASpABVYoQLhcIRAvUwEqQAWoABWgAlSACvgrQLj014opqQAVoAJUgApQASpABVYoQLhcIRAvUwEqQAWoABWgAlSACvgrQLj014opqQAVoAJUgApQASpABVYoQLhcIRAvUwEqQAWoABWgAlSACvgrQLj014opqQAVoAJUgApQASpABVYoQLhcIRAvUwEqQAWoABWgAlSACvgrQLj014opqQAVoAJUgApQASpABVYoQLhcIRAvUwEqQAWoABWgAlSACvgrEAsuz8/PDw4OWvxQgUIUOD8/93d6pvRRYCu78AsvvHDjxo1hlT9vvvlmt9v99re//corr/zbf/tvq9yUJ+r+ySef+Lgl06yhwGKxUO8lLmQwZiGXXYGjo6OLi4socHl8fJzwQwWKVYDvcF9j1kn7yhZ34b29vW5lP6+88srzzz//zOPPl7/85co2xVLxi4uLNIdk/NoKXFxc7O3tFTsYs7TLrsDu7m5guFwsFq1W67LryvZvQoFut7v2+MsvQoGt78K7u7sWrqlC1De/+c0vf/nLj8Hy8/+rUHHfOvL3IbphqMB0Oq3X65sYj1nmpVcglBMvl8v5fP4QV/mhAptQgHCZvy9fhi5cUbh88cUXNaxUf/qCWxXSES7zd2GZQ7fb3cRIzDKpwCMFpC/mCQ+HQ1PR/f39TgU/+/v7ZlsajUYFm9I5PDw021Kr1arYlk6n0263zeaoGMJlnv67XC63qQv/yq/8ylNPPaW5yhe/+MVms3nlypV3K/X5wz/8w1//9V/XyPK55557+dGnUk15WNnRaJQGuoTLnF0YX18sFgcHB5r/12q1w8PDKo78Ozs7WluSJGm321VsyzbRRafTaTQapmk+j4E75gkcHR2ZBZycnMwq+On1erVaTWtOu92eTCaVa81oNDJt32g0RqNR5doym836/b5pGliKcBm8C/d6vSr6yXe/+92f+7mfg2OoQKPR+PrXv97pdK5du/agOp8PP/zwW9/6lkaWX/3qV69fv3726FOdpjys6Z07d65du0a4zNNVV353Pp+bmywrOuxPJhNzQaFWq1V0aDo5OdHGJUXJVRxmZ7OZaZonWrfSU90JFouF6ce1Wq2i+GJd59smSt7f368iJc9ms06n84TjPvpDsibh0t1V065a9/tXtwv/s3/2z8w1y1/6pV/CIkeF4PJP/uRPrly5opHl0dHR22+/rcjy7OysQnD57rvvmlgpWZMrl2md1D9+OByamywrOuxbF0d2dnaqSBdbRsnj8dhct9InaH+vNVNaNws3Go0q4stkMjHFqtVqg8Ggir8qrJTc6XSq2JbJZNJsNjXHVT9eZTzh0uyhK2O2qQvfuXPH/CX91FNPnZycXL9+vXJw+eabb5qP7/zu7/7un//5n4MsqwKXn3322WAw0Mjy2rVrk8lExhMuV3ZYdwLrIQ8VHfat96kqSslWFKsoJc9ms8FgIJd11NTcaDR6vd4T07TbWR1XT09Pn8jo0R+Hh4dVxJfRaGQVq6KULJFL2ai6lJxmGvXjVbaUcOnordZL29SFrcP3F7/4RfXj8A/+4A8qBJf379+/evWqtmD53HPPvf322x9//PFsNqsWXH700UdyeVIh5vXr1z/66KMHDx4QLq19M2uk9ZCH6g771vtU20TJzWazinSRdgux3W4r6HyCCbM68XK5XCwW5iZLboMoA1Wnodh4PC5D9bLWIW2HCrol4XKN/qu6sHW/f0V3MvX7/S9+8YtPjGtJ0mw2b926pVyuQnD5l3/5l7/6q7+qkeVXv/rVP/7jP/700adacHnr1i1twbLb7Y5Go88++0zd0CdcrteF5beshzw0Go0qDvtp96n6/X7W6aMM6a2UXNE1uDTTYNYYDAZPDMLSR33C1s3CFV3gtW6DSJIEYpXBO/3roC9KP7JzRR9Fmkwm1qfqtP2vhEufPqul2aYufOfOnU6no22yfOqppw4PD+/cuYO+UxW4/I//8T9+5Stf0cjyt37rt+7evavI8tNPP60KXH722Wdvv/22SZa3bt1SWEm41Drmen9aD3mo6LA/Go3MB8Or+yiSOYXVarWKUrKPaXLB5fn5ublZuKILvNb7aBWl5LTntipKydZ93NZHTAiXWSckaxeu6E6myWTyS7/0S0/8Vk6SWq127do1YKUKlB8u79+//y//5b80N1n2+/2PP/4YZFkVuPzoo4+uX7+ukWW/31e3wgmXWbttWnrzFmKlF0fMzWmkZG0o28if1luI5qyxPlxaT2TlNoiNGFsWaqVkK4rJb5U2bD0KKu0HDOEybdaxxm9TF/7ud79rLnL83M/93M2bN03fLjlc3rt3r9PpaAuWzz333M2bNyVWqnD5Vy4nk4m5yXIwGOBWOOHS2j0zRW7ZIQ/mo3hJkmj3qcx+Xc4Y6xRmolg5K6/VKu3urtU068Bl2mbhii7wbtM2COtzW2kopvlNCf/M+pA74dJzQtqyLmw9b8gxfJcZLt9///2DgwONLH/913/9hz/8oUmW5V+5tJ6R/u6770qglGHuufTswjLZNh3ycBnOabGiWAnnX61K/rcQ1Rczw2XaZuGKnjW1TdsgrIvVFd0snLb+6v4BQ7iUU05aOK0LV3G//507d37lV35FuxWuzhvSRkb5Z2nh8t/9u39n3gr/p//0n/74xz+2kmWZ4fKTTz4xb4Vfu3btgw8+kDSphQmXad02LX6bDnmwLo5U9zRDOR+pMaq6D+xb11/d61bZ4NJ6Imt1t0GYJ1lu2Wbhim6yTBtiVtKP7Mw8isg6G21TF7b+AtnZ2bl+/bpESTNcQri8f//+P//n/1xbsHzuuefeeOONNKxU8eW8LW599c7169c/+eQTjSa1PwmX1m5rjUx7qWNFh33r4og61MbswiWP2bJzWrLeQlTWyQCX1hNZK7rAa8Vwx320MruydbG6uo8iWXcpeA4xhEvrJIRI637/inbh69evm/v9m83myl8gs9msbHD5l3/5l1//+tc1svza17727rvvusmynCuX1lfvjEYjjSOtfxIu0VvdgW065MG6k6+6pxmmndNSZopIq5v1B7znQ+5ecJn2Usdtel1NRafYbXpvwcpzs9I6AOIJl2kT0pZ1YesvkH/4D/+hPG8IXmEGSgWX3//+9//e3/t7Gll+4xvfkOcNORCzVCuXjlfvWFHSjCRcpnVhGb9NhzxY8aWiiyNWSq7uA/tr30JUQ+5quJzP5+Z5Q9wGYc5Yxcest1hdfD19SvQ5N2tlPoRLOQMhvGX7/c3zhp566inzvCGHt5QHLv/1v/7XGlY+88wzv/u7v6udN1QJuHS/esfkSGsM4RLdNi2wTYc8WBdH3Dv5HP16s5eslFzdc1qsP+A9byEqQ6yAS+tm4UwFbNbesvRt2gaRtsjnft5FqlGqsHW3zRq7FAiX5oS0ZV3YPG9oZ2fHet6Qw8PLAJf/+3//79/6rd/SyPK555575513HChpXirJyqX11Ttvv/229bwhK1aqSMKl2YURs2WHPFjxpaKnGVoX+SpKyWl0kXUvbypcbtlLHdO2QeDNgY6pqGyX0hb5fHabla0tafcR1tulQLjEPLR972Xt9Xraq3eSJNnf3/e8FS49f+Nw+V//63994YUXNLL82te+9ud//ucmPrpjNg6Xn332mfW8Ie3VOw6glJcIl7ILy/A2HfJgfeOa504+2ZFLErZSckXPaUmjizWOA7LDpfVEVm6DKIMrWx9F2qYH9vPcRyBcYjbapi58586dsIcqbxYu//2///fmeUMvv/zyj370IzdHWq9uFi6tr965du2a+eodSZCOMOESXVgGtumQh4D4svEZOY2Ssy7ybbwhqgKhbiGq3Cxwad0sXNEF3i3bBhF2it2sQ1spOaebES7VhHQZunCepwk3CJe9Xk9bsHzmmWeuX79uBUefyA3CZaZX7ziAUl4iXEqmVOFtOuTBOuyvsQNqs5OXKt16Tkt1TzMMThc6XFpfe6+dUcw/qUAMBfLvtiFcLpfLre/CX/ziFw8PDzs5PtJPdnd3tXdeR/rz1Vdfff755zWy/PKXv/ybv/mbL+f4vPTSSzLPSJX3zNbx6h1JkI4w4VLCpfWQhxhjL/OkApoC+c971+FSK4B/UoECFAi120ZCw6U9RL0Ae22wiEajkYMqP/+q9JPC4NJ8XfhXvvKVf/JP/kkOsHz41ZLA5bVr1+7cueOgRs9LhEsJl1v/Q3GDIwmLdiiQ8xai/ba4ozxeogIxFGg0GqEeRZLQQLiMYawN5vnUU0/t7+/nJ8tOpyP9pDC4fPHFF+US41e/+tWcWKm+Xga49Hn1DuFSUqNn2Hrq0Ab7IIu+DAqEehSJK5eXwVtK3caAu2ckNBAuS2317JVrNptByLIMcPn3//7fD0KWJVm59ARHn2RcuZTcSbjMPk7wG7kUaDaboWZkF1yenJwMqvyRrw5vt9tVbspAbrZtNBqVbov2SFooV57NZoTL5XIph5Zt6sKHh4fjQJ9er9d+/PnWt771QSGf3//938fK5dHR0Q8Cfd59992++BTSlA+0Uy19qNEzDeEyDS63bNiv9BQ2GAy2lS4Kgss8z2MGJIa1s5Kokf9hkbWrEeSL8iStgOYPUresmWg/aLJ+3ZFeWpwrl0mSsAtbvWUjT4tfv34dcPnSSy99GuizkafFP/jgg674eIKjTzLCZRpccti39uVNRcq5hnRhtYI20ctVD85MVsU2E0m49NFddnjCJeEyzWcIlz6c50hDuJQIGC8sb4sTLtO680bi5VxDuLSagHBplaV0kYRLH5PIDk+4JFym+Qzh0gGOPpcIl/GAUuZMuEzrwhuPl3MN4dJqDsKlVZbSRRIufUwiOzzhknCZ5jOESx+CdKQhXEoEjBcmXKZ14Y3Hy7mGcGk1B+HSKkvpIgmXPiaRHZ5wSbhM8xnCpQMcfS4RLuMBpcyZcJnWhTceL+cawqXVHIRLqyyliyRc+phEdnjCJeEyzWcIlz4E6UhDuJQIGC9MuEzrwhuPl3MN4dJqDsKlVZbSRRIufUwiOzzhknCZ5jOESwc4+lwiXMYDSpkz4TKtC288Xs41hEurOQiXVllKF0m49DGJ7PCES8Jlms8QLn0I0pGGcCkRMF6YcJnWhTceL+cawqXVHIRLqyyliyRc+phEdnjCJeEyzWcIlw5w9LlEuIwHlDJnwmVaF954vJxrCJdWcxAurbKULpJw6WMS2eEJl4TLNJ8hXPoQpCMN4VIiYLww4TKtC288Xs41hEurOQiXVllKF0m49DGJ7PCES8Jlms8QLh3g6HOJcBkPKGXOhMu0LrzxeDnXEC6t5iBcWmUpXSTh0sckssMTLgmXaT5DuPQhSEcawqVEwHhhwmVaF954vJxrCJdWcxAurbKULpJw6WMS2eEJl4TLNJ8hXDrA0ecS4TIeUMqcCZdpXXjj8XKuIVxazUG4tMpSukjCpY9JZIcnXBIu03yGcOlDkI40hEuJgPHChMu0LrzxeDnXEC6t5iBcWmUpXSTh0sckssMTLgmXaT5DuHSAo88lwmU8oJQ5Ey7TuvDG4+VcQ7i0moNwaZWldJGESx+TyA5PuCRcpvkM4dKHIB1pCJcSAeOFCZdpXXjj8XKuIVxazUG4tMpSukjCpY9JZIcnXBIu03yGcOkAR59LhMt4QClzJlymdeGNx8u5hnBpNcfG4HI8Hg8Gg/F4bK1WkEiaP6uMk8lk8OgzmUyyftc/veZz/l9cmVJanHBJuExzGMKlD0E60hAuJQLGCxMu07pwpvjBYJApvU9iOdcQLq2KaRN9Ij8xTDKbzQaDwc7ODgpqNpuRUKYw8w8Gg0ajoVoUSbTYK5e9Xg9NUA1pNpuR2qL5nNUv14uUFidcRoLLk5MTdF4tEHyQlQYNmDng8sUXX3z22Wdftn1OT08ddLXGpevXrz/z+PPSSy99Gugzm83OHn9eeOEFW1Mexq1RYcdXCJfxgFLmXABc7u/va70Yf4Yd/+MN+9bJYjKZdDodkIY1TZ7ISEOTAiSYIC0QcDCczWaR6EKz+BNtCetbypD9fv+JMh79sbOzE4Mv45kfTjkej7XOGUO0eOZXDZG+pVmn1+uhsaECms+FynY2m0mLEy4jwaXDW8IOeZpBA2YOuDw8PNwmuLxy5QrhUsJZ1cMFwKUcM7XBP+xcFm/YN2eQXq9Xq9Vkc8w0OWOkbgGHJsLlmnaZTCYw+cnJyWAwAJm12+01M03/Wjzz/3TaUz+MpPuqcNgOicbJGb3ZbCI+SEARf7PZ7Pf7g8Gg1+tBulqtFnzrQrxRBtVOkoRwGQkulcg7Ozsd4xPc+aVBA47ggMt2u63g8qbxuX37tmPpbo1LsVcuT09PFVy+9dZbRmturlFhx1e4clkMthYAl2raajabRm/uhB354w372iTYbrcxL+/v7/d6veDjUrzfvbPZbDwem7ZQMRgPR6OR1uo8f0aiC83iMMrDQHCToA0nJyfQAgvXYV05qvlnsxmWYHd2dvr9PqweXDQlFKRLkiQ4XKpfS7CICqBFASd1lbPmc1q5ef5EnQmXqifH8Ea1fWJ/fz+PpTy/Kw0a0A8Bl88///yzzz579epVB0iFuhQbLv/Vv/pXCi4//PDDUHVOy4dwuR1wOZlM1EAhZ2TPvpk1WbxhX9YEE2Wj0QhOFLKgSEOTLMIMq7F3Z2fHvJQnBqKFpQvN4nHhUnFkrVaTQmALV3D/jm3+Wq2GCQ9lxZjOY98Wl+ZAGPQcnGU1n5tUl3cAACAASURBVEOJ+QOwwmbh8vj4uNVqzefzYmYgrRTZh2N4o8ofnp/fao4cpEEDlgi43N/ff/bZZ4Nvr7QyWWy4fPXVVxVcWksPG0m41DpdpD9jr1xiKI4xUGj9GmWpAUS7GuRPFBHvQQ7UM9LQhPzNwHg8VtIdHh6aV/PEVB4uR6ORkka7Aw7JgkNMbPPLfaIoK1IvjWR+t0cqeyVJ4k6W9SqGgOCjDKywWbhstVpJkkyn00hTjjtbWC3GzQcsdfT7/ax2XyO9NGgMuPy7f/fvPvvss2dnZ2HZy5pbbLh85ZVXrly58vrrr1tLDxtJuHT3wVBXY8MlVhDkXLZGP/X5SrxhH6Vj9aqA5kQamtAWM3B4eKjG9uArspHoQrO4nJgC3xZ3rFDizrgpaJ6YIs2PsgiXK02m+dzK9P4JYAXCperJwb0Rtgues9XK0qAx4LLZbD777LM3bwbekmgludhw2el0rly5UswqLOEyFD6684kNl6AKa+8LG4mhQw1NYTOfzWa9Xk/lHOMhVLO2kYYmsyDEKExqNBqICRWAG1T1tji22ZrTEuwUdpsqsk2SJODMZLUoyjJbZ02fNTKS+d3VUH01+A6PeKMMrEC4jASXGMHdnhPqqjRowC6sbot//etfV3B59+5dKw6GjYwNl7/xG79x5cqVYkCZcOmGwlBXY8OlmpSD3zO0dv94w74qTo0V2qY7a02CREYamtLqhhu/wXcPxtt0p1lcTUmf/xuWk2AMc1HXwZ1pWvvEo0TCpY9cWhp4c/ChR/M5rdw8f0qLb/Bp8S2+La5+5NRqtcFgEPanoNXu0qDB4fLw8FDB5e3btwvgy9hweeXR5+zs7O7du/fv3w9LxlpuhMtQ+OjOJzZcqv6ljjQ252Vrl1w7Mt6wr56wVtSCTXej0SgswGgNjzQ0aaXgTzBSDDNFWrrSLB4RLnFGN/RCAG0Lu5GrSPOjrEgODYnCLlzDBGYA2xgCTuqqFM3nzKLXjoEVuHKpenJwb8TZYSr/Wq3WbrdjjHfKB6RBA/qhWrn8B//gHyi4xNmQN27ciEeZUeHyjTfeUHCJtrz++uvBT1MCYm4fXM7n8+lan4uLCzcg5rkaGy5xMqDqzup8sUgbFuMN+/KeeP/RBxvtkiT56W/IGC2KNDSlzX3KUjHuiW/DyiW41ZQP5BRw/oh9FJHWCrha8OlcFQSJCoNLtCg4OsQbZVBnwmUkuJQKo0erhUytRwT5UxYXcHBQcNlutzW4VGQ2Ho9BUQEDUeFSHXJpHqJ+48aNgE1AVtsHl+puA1zaPxD1DklsuLQ2M9IhPvGG/dlshodd5ESJ1gW/+VYwXeC5q0jbSaVoAbXSLA5zPAyE5SRkbc46aFvA+aNg82MWDCsatIJExcBlvEf4zTcQoI35A7AC4VJ1t+DeiDWA8Xjc6/WwQhDjsP14XVjB5T/6R/+o0+lcu3bt/v3777///unpKZb93n//fYBUqEBUuBwOh2ePPg8ePLh79+5bb72FtsR4Fn774FIdH9bK/hkOh3nWJt3fjQqX6Muz2Ww0GnU6HSxkxlgh01Aj/2gvc5Aj//7+vloQGQwGaFFwLJMlhuUW2S4Vxj1xaTIz2doxkehCszgIkHCZzVJwteDTuapHJPOnNRLeHLxPEi7d00n+q7IPR/JGuM1kMsF2lxjHqqNbhd02reBSvfTi2rVrwEcwWa/XC75tMSpcKrKUHHn79m3wZfBj1bcPLvP3uxg5RIVL9GIERqMRaCz4gyMaaqDQIAGMQtrCGwoN/lhqpKHJVAPvNYwxwKriItEFxJdT0ufhsDMTCjDlQ9vC/gIozPxyiSWsaNAKEhWwcolHeWL8ft0auJzP52nLHPV6PUmSvb09a4Lj4+MY8xDyREcLfvMB3igDWOT+qWcG/2EdqQunweWDBw96vZ5isuCLlwXD5YMHD8DKEjpB0nkChEt0t6iBguFSbl4MPvhrqCHHkPxhDHrm/Iu7K2H3d0UamkwpcEBHjIUeVVwkutAsDhs9DJh2MlvuHwMbm19B28LKV5j5twwuoVtYB4DdNZ9DfP4Aal7AbfHpdPpEb/H+o9VqRZ2QZEUiWVCzFGQPXhxyLmbl8sGDBzdv3lRwGfxMn+Lh8u7du6otwQ+/JFxG7cLIvHi4nM1mGEC0bp7zz3jDvrvOuAtX0ceF8Qxl8J/uMCgALOzSlWZx+NXDQNipAvOEqRF240YqMezMBJPIAFoXtgkoIpL5kT8CeEgcZzrgUqiA5nOhspWIXwBcLhaLtKdL9/b2kiQ5PT21Joj9WkjZhyN5o2YyOGfYOw+aQQNm7li5jAdkxcPlgwcPcGc8zzql+V3CJfgvamAjcBlpLos37LvhMtLoBJWi0gXeiBbvnvg2PC0OADcnPNgp7Ml5yDaq+dVEi7LM1mkz8Xp/ooeE/W2hVWY8Hqs9N7VazfwNoCVe+89Io0y/38eGoQLg0jGpbPE5l1ajwzkD8p8qCN0qYBeeTCZXr15VGy7VAz0SnioHl9///vfPxEe2pXJwOZlMrl271n38KfIFqpfzKCJrd0anCzuXRRr2VRN87ouGHZ2gUsChyTQH1nrCLrtqBWEAD0gXk8kEa8ZyvePzcFjfQgNMmbAbV2tzzj+LMb+qJMoKKxoUgHoBzY/MEYjdClVQjFEGi9/w49PTUwf/Rb10aeHS7NpwrfUCcMhQI/h4PP72t78NsnTAZfB9isFXLn/84x+fn58LsHwYtMJl8BeOx1i5vHnz5mOq/Pz/u3fvRu2nMvPLeRSRtVei04VdX4gx7KP+qLO5sRJTZ9hHlFBiqKEJbZEBhUaxXzsEiULRxWg0AtRhRn4iEJaTcFbT4eGhlA9r2tpzXlqaNf4sxvyqYigrrGhodXDzI2cEUIRpIKQJEgg7ysgHluG+9Xo96uHGcloyw5cNLuH8Ye88BL8tLu+Ggy81IMOey+CnXYaFy9ls9h/+w3/QyPK9996TcIlV2OCnXYaFy08++eT69esaWb722muLxcLsXJFiLuFRRGmDuRpFgwNN2GFfqzwWF8zft1g/Czs1Y9CLB5d4VjLeFjUlI6b+IHCp3UJU7nR0dITZ+WEgrDGwe0A7FADQGXbVOvjMpHmz9idcLaxoKCWs+ZEtArGfEEdBYZ8WlyeZwXf39vZi72t0z3CXCi4xAmr9Wlp87TC6Vc4R/M6dO71eD0CJgEZj8mnxe/fuSVDLHw4Ilz/4wQ80rDw7O/uzP/uzn/zkJ7KeeFo8+Kt6AsLlBx98IG+FK8S8ceNGkWTp7s4bvFr8nks8mxwcaKLCJSjCXBnBElrYhdhQQ5NjbMSkbxKz41trXEJB+eESlI/pOEkSdUCKjAkMl7PZzLrtEkYyF7TXkEl+BTnnnJlknmlhlFVFuJxMJmrPSq1WC774ZCoWapSRXQKOe3R0tPFp6VLBJTw/7F0n5TbIPE8XvnXr1snJCYBSBX7nd37nf/yP/yFRTD4qHnyp78GDB0Hg8uOPP3733XdNsvzggw+0tmDZ8urVq9ql/H+Ggst3331XW7Dsdrvn5+f/7//9vw0iXXmKLhgucaRikiTBJ4JQw745oagYTGESIvHTN/gDMUGGprS2aC1yJ8t/Vc6ka99ATruFiLcMYI5+GAjOSXAvQAz2qwb/ncSVS3+fA/S32+2B7ROW++EGytv864mUk8kEdZYuu8F9lnJC2la47HQ6vV4PzjAajTDCBj8VT9ka+a8Nl9/97nc1rFT7LG/fvn3z5k2cLn7v3r2zs7OXH32uXr0afNkyCFz+6Ec/unnzpkaW77zzzo9//GP5VvT79++Px+OrV6+q5gQ/sPPBgwf54fKzzz57++23TbIscp+l7LPlDEeFy3a73e/3gWL9fh+PxZjrfxh71w7kH/bdRZtrrhJ3gsNM/qHJ3RzcS4xhC63o/HBpvYW4u7srbyHKmTo8XMp3gMqSIj2bHNv80kIoK7gTq1Lym1/WVoa1Pi/tgnDYHQtaibIyPuHRaIRBEDWs1+tFPlvqnoq2FS5N2ZX+kV5GnPP34Z07d/r9vkmWb731ljxgXBEY/r169erdu3fzr+2ZOeRcufzhD3+oYeXZ2dl77733k5/8RL6MBw1RgeA7R1W7csLlRx991O/3NbJ87bXX/u///b/unnXZrsaDSyzpYQhFoN1ugzh9BmTPNDmHfZ9SsOKws7PTbDZxeEgVl65wfzn4ErKpZE66kF+HFx0cHGi3EHHpYSASJ0E1VVij0YgkH4Bv7WUP0wxpMSgrkmjSfmsvXFsrr/X5Jzzg8R/lgUv8PH1ctYf/7+3taX682UloW+ESTi7FjzQVKV+VJWZywlu3bsnzhhRiHh8f/9mf/ZnCIzy4I2ns9PQUa5kmHeaMWRsuP/74Y+28IUWZWJJ8//33sU6J5vR6PSTIWXPz63ngcjKZaFj5U4S6ceMGb4Wbo1ZUuDR/K9ZqtUy9zDqhpEVqE01asjzxk8lEo4t4U//aQ5NnAxUZx9jIblZgbbpIu4XY7XZNZ5azRiy4nM1m4/FY7YKKulM1tvmlkUajkbqfHOM3X7xjTn+6ODSZTGx3wp+Iw51Q2eS1w+uNMmnnZh0dHZl+vNkYdWbepnhX9uHgP3XG4zGejJG3yNd2BvcX1+vCN2/e1M4b6nQ63W5X22R5//79999//+ajz3g8joeVCs7Wg8sf/ehH5nlD77zzjnWTpWrLzZs3Iy2+gjLXg8vPPvtsNBqZZHl+fr7ZDlva0uPBpep3o9EI25HlLXJ3r1zv6nrD/hplgS6iDlDrDU2ezcGkHGndTavGenCZdgsxrTvLiSkiXGpti/RnVPNHqnNatuuZPy23zcavMcpYz82q1+vYLFza6aH4isk+HBwuC/acNbrw9evXzVvh/+bf/Jv79++DjTYSWAMu7969a5439L3vfe9//a//tZEmoNA14PKjjz6ynjckd2UV31lKXmJsuCyyO68x7BdZvaxlrTE0ZS2isPRr0EXaLUTHCYByYiJcFmbc1QWtYf7VmW4oRdZRxnpulrZZuOSTRJHVk334UsHlnTt3zFvhnU7nj/7oj0BFGwxkhcs//dM/Vbe/5b+3b9/WzhvaSIuywuWdO3fM84ZOT0+5ydI9MhAuNzRHrS720sKl4xai+2adnJgIl6s9rLAUlxYuzT00SZK0Wi23H7uH7O2+Kvvw5YFL89U7nU7n+Pj4zp07G8Evs1B/uPz444/NW+FnZ2flaUsmuDRfvdPtdofDITdZrhyICJeFzbBZC7qccDkej3FuqJxofM5pkekJl1n9LWL6SwiX8iAJ6ZfWzcIrh+nLk0BqdUng0vrqnW63+z//5/80IW9TMZ5waX31zjvvvBN7S2gmWTzh8rPPPjNvhXe73fIc7FDyYYFwGXFOzZf1JYRL6y3Eer3uubNFTkyEy3zeF/Tblw0uredm1ev1tM3CJZ8kiqye7MNbD5fqfqu5yfKNN97Y+CZLDdd84NL66p3vfe97/+f//B8tt83+6QOX1lfvvPbaa5988kmR3aHSZREug86iITO7bHBpvYWY6ZwWOTERLkP6Ys68LhVcysbCIzf+UseqzFJQLN5pYjmd2f/r7hHc+uqdTqdjvtRxsyimSnfD5ccff/zHf/zHcnulCpsvdSxDW1bCpfXVOzdu3OAmy0zDCOHSf6woOKV7aCq4MjmLkxOuedDhZDKRjcX8ol7q6O/P+OLDwNYve+Q0SZFfd5u/yJrkL8vxQE/auVnmiaz+Pn3ZUso+vMVdeDQamQuWx8fH2nlDZUCxlXBpffXO2dnZX/zFX5Sn/rImDrhMe/UOX+q4xkBEuMw/3UTKQfJWvMNBI1Vey9ZBF2m3ENc4p0VOTIRLzQSb/NNh/k1Wa62y0+DSem5WkiQ+m4XXGLi39SuyD28lXKa9eufatWtluxUugSxt5dL66p133nln4+cNycpr4TS4tL56p9vt8qWO6402hMu1ZpgivnQZ4BJv55ZzytrntMhMCJdF+KhnGVsPl71eD2/rgheW6qWO600PxX8L6m3lzQfrq3c6nY56qaPGQKX604TLtFfvfO973yvDeUMO9axwaX31zmuvveY4+q743lGtEgmXnvNj8cm2Gy7TbiHmOadFTkyEy+I9NrXELYbLtHOz9vb2OC2tMRfKPrxlK5fWV+8cHx+Xc5OlBmcaXFpfvXN2dhbvnY1affL8qcFl2qt3bty4wSPD1ujC+ArhMnVG3PSFLYbLtFuIOc9pkRMT4XLT/ivK32K4tJ6bVcKXOmLEL3lA9uFtgsv9/X1zk6X5Usc8zBT1uxIuj46OzFfvWF/qGLVKa2euwaX1vCEe7JB/oCBcijmwXMFthcvao4+cRJIkCXJOyxN5btPMtMVbbsvV5zxqo+25fMLnHv2xxmbh/OP41uQg9dymLtxsNjW4LMNLHf35TMLlCy+8oD0Y/kd/9Edl3mSpNVODS/N14Z5H321Np4vUEMKlx3yymSTbCpdy+lDhUOe0PJHzycnJoMofuSTWbrer3JRBu92GbRqNRqXbYt0mrFq39mbhSIN7FbOFnyRJsk1duNFotMWn3+9/UKnP7//+7z/z+PPVr361Lz5vvvnmf//v/71Crbl165YJlCqGL3UMOGhIuNyyYb/SU9hgMNhWupDTR5IkR0dHoXa2aDnzTypQnAJ5NgsHHNCrnlVxBttQSV/4whdefPHFNLgpbfyLL774mC2f+L+KbUkTmS91DDt6SLjcUG9jsZdXgbDntFxeHdnyzSqQ9UTWsIP4NuW2WTvGLv2v/JW/8u1vfzsNbsocb8Lll7/85W9+85tlrnOmut26dWub+lEZ2kK4jD2eMH+rAjHOaXm4c9NaGCOpQCQF6vU6N1kGnMm2uAvv7e298sormYinPIk7nY5csXz++ed/+7d/uzzVy1MTvtQxYP+VWQ2Hw0ijLrOlAmkKZHqpo3RXdzgZDoe7u7tppTKeCoRVoNVqce+/u09mvbqVXfgLX/jCL//yL+cBoDJ899d+7dcUX/7ar/3aq6++WoYq5a/DcDjkSx2zdlL/9MfHx2GHXOZGBRwKxLuFmPg7PVNSASpABagAFaACVIAKUAG3AoRLtz68SgWoABWgAlSAClABKpBBAcJlBrGYlApQASpABagAFaACVMCtAOHSrQ+vUgEqQAWoABWgAlSACmRQgHCZQSwmpQJUgApQASpABagAFXArQLh068OrVIAKUAEqQAWoABWgAhkUIFxmEItJqQAVoAJUgApQASpABdwKEC7d+vAqFaACVIAKUAEqQAWoQAYFCJcZxGJSKkAFqAAVoAJUgApQAbcChEu3PrxKBagAFaACVIAKUAEqkEEBwmUGsZiUClABKkAFqAAVoAJUwK0A4dKtD69SASpABagAFaACVIAKZFCAcJlBLCalAlSAClABKkAFqAAVcCtAuHTrw6tUgApQASpABagAFaACGRQgXGYQi0mpABWgAlSAClABKkAF3AoQLt368CoVoAJUgApQASpABahABgUIlxnEYlIqQAWoABWgAlSAClABtwKES7c+vEoFqAAVoAJUgApQASqQQQHCZQaxmJQKUAEqQAWoABWgAlTArQDh0q0Pr1IBKkAFqAAVoAJUgApkUIBwmUEsJqUCVIAKUAEqQAWoABVwK0C4dOvDq1SAClABKkAFqAAVoAIZFCBcZhCLSakAFaACVIAKUAEqQAXcChAu3frwKhWgAlSAClABKkAFqEAGBQiXGcRiUipABagAFaACVIAKUAG3AoRLtz68SgWoABWgAlSAClABKpBBAcJlBrGYlApQASpABagAFaACVMCtAOHSrQ+vUgEqQAWoABWgAlSACmRQgHCZQSwmpQJUgApQASpABagAFXArQLh068OrVIAKUAEqQAWoABWgAhkUIFxmEItJqQAVoAJUgApQASpABdwKEC7d+vAqFaACVIAKUAEqQAWoQAYFCJcZxGJSKkAFqAAVoAJUgApQAbcChEu3PrxKBagAFaACVIAKUAEqkEEBwmUGsZiUClABKkAFqAAVoAJUwK0A4dKtD69SASpABagAFaACVIAKZFCAcJlBLCalAlSAClABKkAFqAAVcCtAuHTrw6tUgApQASpABagAFaACGRQgXGYQi0mpABWgAlSAClABKkAF3AoQLt368CoVoAJUgApQASpABahABgUIlxnEYlIqQAWoABWgAlSAClABtwKES7c+vEoFqAAVoAJUgApQASqQQQHCZQaxmJQKUAEqQAWoABWgAlTArQDh0q0Pr1IBKkAFqAAVoAJUgApkUIBwmUEsJqUCVIAKUAEqQAWoABVwK0C4dOvDq1SAClABKkAFqAAVoAIZFCBcZhCLSakAFaACVIAKUAEqQAXcChAu3frwKhWgAlSAClABKkAFqEAGBQiXGcRiUipABagAFaACVIAKUAG3AoRLtz68SgWoABWgAlSAClABKpBBAcJlBrGYlApQASpABagAFaACVMCtAOHSrQ+vUgEqQAWoABWgAlSACmRQgHCZQSwmpQJUgApQASpABagAFXArQLh068OrVIAKUAEqQAWoABWgAhkUIFxmEItJqQAVoAJUgApQASpABdwKEC7d+vAqFaACVIAKUAEqQAWoQAYFCJcZxGJSKkAFqAAVoAJUgApQAbcChEu3PrxKBagAFaACVIAKUAEqkEEBwmUGsZiUClABKkAFqAAVoAJUwK0A4dKtD69SASpABagAFaACVIAKZFCAcJlBLCalAlSAClABKkAFqAAVcCtAuHTrw6tUgApQASpABagAFaACGRQgXGYQi0mpABWgAlSAClABKkAF3AoQLt368CoVoAJUgApQASpABahABgUIlxnEYlIqQAWoABWgAlSAClABtwKES7c+vEoFqAAVoAJUgApQASqQQQHCZQaxmJQKUAEqQAWoABWgAlTArQDh0q0Pr1IBKkAFqAAVoAJUgApkUIBwmUEsJqUCVIAKUAEqQAWoABVwK0C4dOvDq1SAClABKkAFqAAVoAIZFCBcZhCLSakAFaACVIAKUAEqQAXcChAu3frwKhWgAlSAClABKkAFqEAGBQiXGcRiUipABagAFaACVIAKUAG3AoRLtz68SgWoABWgAlSAClABKpBBAcJlBrGYlApQASpABagAFaACVMCtAOHSrQ+vUgEqQAWoABWgAlSACmRQgHCZQSwmpQJUgApQASpABagAFXArQLh068OrVIAKUAEqQAWoABWgAhkUIFxmEItJqQAVoAJUgApQASpABdwKEC7d+vAqFaACVIAKUAEqQAWoQAYFCJcZxGJSKkAFqAAVoAJUgApQAbcChEu3PrxKBagAFaACVIAKUAEqkEEBwmUGsZiUClABKkAFqAAVoAJUwK0A4dKtD69SASpABagAFaACVIAKZFCAcJlBLCalAlSAClABKkAFqAAVcCtAuHTrw6tUgApQ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MeKcnJy02/6Y+nAg27Rp0wsvvBDTgmQymT179mzYsIHmLONLyfYqmJ6e/vLLLxuj+0SqFNeuXWtpaQlzNEZaTa5AS0tLTR919N5frNXV1VwuZx8+4AMFTCiAJ7S8d06PIb/88suFhYW5Rjmmp6cnJyf/8z//87//+7/jXqaZmZnJtWNmZibuZaH8X7t2zWPLRDAfCly7ds3EwIs4oYBSAXPd2fLR+nELFIACUAAKQAEoAAWgABRQKgC4VMoCTygABaAAFIACUAAKQAE/CgAu/aiGe6AAFIACUAAKQAEoAAWUCgAulbLAEwpAASgABaAAFIACUMCPAoBLP6rhHigABaAAFIACUAAKQAGlAoBLpSzwhAJQAApAASgABaAAFPCjAODSj2q4BwpAASgABaAAFIACUECpAOBSKQs8oQAUgAJQAApAASgABfwoALj0oxrugQJQAApAASgABaAAFFAqALhUygJPKAAFoAAUgAJQAApAAT8KAC79qIZ7oAAUgAJQAApAASgABZQKAC6VssATCkABKAAFoAAUgAJQwI8CgEs/quEeKAAFoAAUgAJQAApAAaUCgEulLPCEAlAACkABKAAFoAAU8KMA4NKPargHCkABKAAFoAAUgAJQQKkA4FIpCzyhABSAAlAACkABKAAF/CgAuPSjGu6BAlAACkABKAAFoAAUUCoAuFTKAk8oAAWgABSAAlAACkABPwoALv2ohnugABSAZKLyggAAIABJREFUAlAACkABKAAFlAoALpWywBMKQAEoAAWgABSAAlDAjwKASz+q4R4oAAWgABSAAlAACkABpQKAS6Us8IQCUAAKQAEoAAWgABTwowDg0o9quAcKQAEoAAWgABSAAlBAqQDgUikLPKEAFIACUAAKQAEoAAX8KAC49KMa7oECUAAKQAEoAAWgABRQKgC4VMoCTygABaAAFIACUAAKQAE/CgAu/aiGe6AAFIACUAAKQAEoAAWUCgAulbLAEwpAASgABaAAFIACUMCPAoBLP6rhHigABaAAFIACUAAKQAGlAoBLpSzwhAJQAApAASgABaAAFPCjAODSj2q4BwpAASgABaAAFIACUECpAOBSKQs8oQAUgAJQAApAASgABfwoALj0oxrugQJQAApAASgABaAAFFAqALhUygJPKAAFoAAUgAJQAApAAT8KAC79qIZ7oAAUgAJQAApAASgABZQKAC6VssATCkABKAAFoAAUgAJQwI8CgEs/quEeKAAFoAAUgAJQAApAAaUCgEulLPCEAlAACkABKAAFoAAU8KMA4NKPargHCkABKAAFoAAUgAJQQKkA4FIpCzyhABSAAlAACkABKAAF/CgAuPSjGu6BAlAACkABKAAFoAAUUCoAuFTKAk8oAAWgABSAAlAACkABPwoALv2ohnugABSAAlAACkABKAAFlAoALpWywBMKQAEoAAWgABSAAlDAjwKASz+q4R4oAAWgABSAAlAACkABpQKAS6Us8IQCUAAKQAEoAAWgABTwowDg0o9quAcKQAEoAAWgABSAAlBAqQDgUikLPKEAFIACUAAKQAEoAAX8KAC49KMa7oECUAAKQAEoAAWgABRQKgC4VMoCTygABaAAFIACUAAKQAE/CgAu/aiGe6AAFIACUAAKQAEoAAWUCgAulbLAEwpAASgABaAAFIACUMCPAoBLP6rhHigABaAAFIACUAAKQAGlAoBLpSzwhAJQAApAASgABaAAFPCjAODSj2q4BwpAASgABaAAFIACUECpAOBSKQs8oQAUgAJQAApAASgABfwoALj0oxrugQJQAApAASgABaAAFFAqALhUygJPKAAFoAAUgAJQAApAAT8KAC79qIZ7oAAUgAJQAApAASgABZQKAC6VssATCkABKAAFoAAUgAJQwI8CgEs/quEeKAAFoAAUgAJQAApAAaUCgEulLPCEAlAACkABKAAFoAAU8KMA4NKPargHCkABKAAFoAAUgAJQQKkA4FIpCzyhABSAAlAACkABKAAF/CgAuPSjGu6BAlAACkABKAAFoAAUUCoAuFTKAk8oAAWgABSAAlAACkABPwoALv2ohnugABSAAlAACkABKAAFlAoALpWywBMKQAEoAAWgABSAAlDAjwKASz+q4R4oAAWgABSAAlAACkABpQKAS6Us8IQCUAAKQAEoAAWgABTwowDg0o9quAcKQAEoAAWgABSAAlBAqQDgUikLPKEAFIACUAAKQAEoAAX8KAC49KMa7oECUAAKQAEoAAWgABRQKgC4VMoCTygABaAAFIACUAAKQAE/CgAu/aiGe6AAFIACUAAKQAEoAAWUCgAulbLAEwpAASgABaAAFIACUMCPAoBLP6rhHigABaAAFIACUAAKQAGlAoBLpSzwhAJQAApAASgABaAA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" } }, "cell_type": "markdown", "id": "15c6adfc-5873-4da3-86c2-d35fce5217f8", "metadata": {}, "source": [ "![image.png](attachment:8c33cb09-bfe6-4c0f-8168-616e264fd686.png)" ] }, { "cell_type": "markdown", "id": "fbaa60e5-d9ef-4f6d-9508-caed5874c51b", "metadata": {}, "source": [ "### 2.5.2 广播规则\n", "- 规则1:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1。\n", "- 规则2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度\n", "为1 的维度扩展以匹配另外一个数组的形状。\n", "- 规则3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,\n", "那么会引发异常" ] }, { "cell_type": "markdown", "id": "a7a92c0b-ffad-42f8-a235-ff0117e17e62", "metadata": {}, "source": [ "1. 案例1\n", "\n", "a. (3,) 维度数少。 -> (1,3)\n", "\n", "b. 在第一维度不匹配。 -> (2,3)\n", "\n", "c. so,结果是(2,3)" ] }, { "cell_type": "code", "execution_count": 33, "id": "aac635fb-3e99-4f56-8f0a-6d22fc69628d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1., 2., 3.],\n", " [1., 2., 3.]])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M = np.ones((2, 3))\n", "x = np.arange(3)\n", "M.shape # (2,3)\n", "x.shape # (3,)\n", "M + x" ] }, { "cell_type": "markdown", "id": "0895c586-d3b3-40cd-9a87-af38a18cad50", "metadata": {}, "source": [ "2. 案例2\n", "\n", "- a. 补全b维度, (1,3)\n", "- b. 匹配维度,(3,3)" ] }, { "cell_type": "code", "execution_count": 37, "id": "85f7a45d-b583-4a2d-b0c6-3dcfc7572a3c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [1, 2, 3],\n", " [2, 3, 4]])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.arange(3).reshape((3, 1))\n", "b = np.arange(3)\n", "a.shape # (3,1)\n", "b.shape # (3,)\n", "a + b" ] }, { "cell_type": "markdown", "id": "3f099d6b-8d46-472a-bbfd-6bc9d8842dd8", "metadata": {}, "source": [ "### 2.5.3 广播应用" ] }, { "cell_type": "markdown", "id": "347b8426-47f9-4e76-8bc0-74a11cc2ffed", "metadata": {}, "source": [ "1. 数组归一化" ] }, { "cell_type": "code", "execution_count": 45, "id": "919c8782-73c1-45c2-b276-b1791a67ca07", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.28746899, 0.39055001, 0.06960613],\n", " [-0.28358642, -0.08141981, 0.4679283 ],\n", " [ 0.0530289 , 0.17565128, 0.44597887],\n", " [ 0.09055865, -0.49952404, -0.3820369 ],\n", " [-0.42046329, -0.18245713, -0.3536573 ],\n", " [-0.28336433, 0.12060247, -0.4098298 ],\n", " [ 0.09150787, -0.09616353, -0.30112625],\n", " [ 0.40635463, 0.13742707, 0.55295189],\n", " [-0.09120414, -0.11714309, 0.20782362],\n", " [ 0.14969915, 0.15247675, -0.29763855]])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.random((10, 3))\n", "xm = np.mean(x, 0) # 0表示行聚合, 值为每个特征的平均值\n", "x - xm" ] }, { "cell_type": "markdown", "id": "2a74f775-6e67-4298-bb9b-d1f076e087c1", "metadata": {}, "source": [ "2. 绘制二维函数" ] }, { "cell_type": "code", "execution_count": 73, "id": "adbfd8b1-6a94-4010-b4d5-d251818e023b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(50, 50)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linspace(0, 5, 50)\n", "y = np.linspace(0, 5, 50)[:, np.newaxis]\n", "z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)\n", "z.shape" ] }, { "cell_type": "code", "execution_count": 76, "id": "a605cb68-f293-44da-b8fc-64a4c7815139", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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yB977LELfRrL3rFjx3IA+dNPP32hT2XZGxkZyf/2b//2Qp/GsjQ7O5tfeeWV+ZNPPpn/0i/9Un7PPfdc6FNaVu6///78hhtuWNIxvHzC6ff7eO6553D77be/6+u33347/vM//9PHKchF7O0eS4vZvfaDIk1T7Nq1C61WC1u2bLnQp7Msbd++HZ/85CfxiU984kKfyrJ18OBBTExMYOPGjfjN3/xNvPLKKwuav6jdohdqMW0NRM5FnufYsWMHPvrRj+K666670Kez7Ozfvx9btmxBt9tFvV7HY489hmuvvfZCn9ays2vXLnz/+9/Hnj17LvSpLFs333wz/vEf/xFXXXUVjh49ioceegi33HILDhw4gLGxsXM6hpeA87aFtDUQORd33XUXnn/+eTzzzDMX+lSWpauvvhr79u3D1NQU/uVf/gXbtm3D008/raDzDpOTk7jnnnvw7W9/G+Vy+UKfzrK1devWM/99/fXXY8uWLbj88svxD//wD+/qecZ4CThqayDnw913341vfetb2L17N9auXXuhT2dZKpVKuOKKKwAAN910E/bs2YMvfvGL+PKXv3yBz2z5eO6553Ds2DHceOONZ76Wpil2796Nhx9+GL1eD1HEW1Z/ENVqNVx//fU4ePDgOc/x8m84amsg76U8z3HXXXfh61//Or7zne9g48aNF/qU3jfyPEevN79P/QfZbbfdhv3792Pfvn1n/tx00034zGc+g3379inYGHq9Hl544QWsWbPmnOd4+5XaUtsafFDMzc3h5ZdfPvP/hw4dwr59+zA6Oor169dfwDNbPrZv346vfvWr+OY3v4lGo3Hmk3Oz2USlUrnAZ7d8fP7zn8fWrVuxbt06zM7OYteuXXjqqafwxBNPXOhTW1Yajca8f/+r1WoYGxvTvwu+w+c+9znccccdWL9+PY4dO4aHHnoIMzMz2LZt27kfZOnJcufur//6r/MNGzbkpVIp/9CHPqQ01rP493//9xzAvD/btm270Ke2bJxtfQDkX/nKVy70qS0rv/M7v3PmeVu5cmV+22235d/+9rcv9Gm9Lygter7f+I3fyNesWZMXi8V8YmIi/7Vf+7X8wIEDCzqG2hOIiIgX2ktNRES8UMAREREvFHBERMQLBRwREfFCAUdERLxQwBERES8UcERExAsFHBER8UIBR0REvFDAERERLxRwRETEi/8fKYgVA503WAwAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "plt.imshow(z, origin='lower', extent = [0, 5, 0, 5], cmap = 'viridis')\n" ] }, { "cell_type": "code", "execution_count": null, "id": "fbf601b6-d74b-406e-a1f1-ecf3678c42a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "80b2b9f6-789b-4b04-bdb6-ce4609b7baa2", "metadata": {}, "source": [ "## 2.6 比较、掩码和布尔逻辑\n", "\n", "需要统计筛选,条件删除等操作时候" ] }, { "cell_type": "code", "execution_count": 77, "id": "308563b8-64d1-4b2e-801c-1a62c050a154", "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 88, "id": "2fa516ee-b4b0-43d8-b573-7792c0d1d510", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(365,)" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rainfall = pd.read_csv('Seattle2014.csv')['PRCP'].values\n", "inches = rainfall / 254\n", "inches.shape" ] }, { "cell_type": "code", "execution_count": 85, "id": "3625380f-ce0d-4451-b89d-03d270e43c43", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn\n" ] }, { "cell_type": "code", "execution_count": 86, "id": "c6c64703-7e07-4347-bcef-73d3607cfcff", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([289., 25., 20., 13., 10., 3., 2., 2., 0., 1.]),\n", " array([0. , 0.18385827, 0.36771654, 0.5515748 , 0.73543307,\n", " 0.91929134, 1.10314961, 1.28700787, 1.47086614, 1.65472441,\n", " 1.83858268]),\n", " )" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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lJycrIkTJ+r06dO2PdaS9Pbbb8vn86m0tHTQumg41sGwwzkdKjuc18GK9nM6VHY9p2OiqOTm5iolJUUHDx70L/N4PDpy5IgKCgoGbV9YWKj29vaA99wP7Dt9+nQ5HA5Nnz5d7777bsB+Bw8e1J133nmDUgQn2MySVF1drf/6r//ST37yE82fPz9gnc/nU0lJibZs2RKw/PDhw/qTP/kTpaamRj5ECILNvXPnTt11113+y8GSdOHCBX388ceaMmWKbY+1JDU3N2vq1KmDHq6LlmMdDDuc06Gyw3kdDDuc06Gy6zkdE7d+4uPjVV5erpqaGqWlpWnChAlav369MjMzVVpaKq/XqzNnzmj06NFKTExUfn6+pk+friVLlmjVqlW6ePGiVq5cqb/6q79SRkaGJGnevHl64oknlJeXpxkzZmjPnj06evSo1qxZM8JpvxRs5r179+o///M/VV1drW9961v6/PPP/WMNbHP//fdr+/btuuWWWzR16lQdOHBA27dv1/Lly0cwaaBgc997773atGmTqqurVVlZqZ6eHm3YsEFpaWkqKyuTZL9jPaClpUXZ2dmDxnM6nVFxrL+OHc/pobDref117HhOX0/MndMj/f7o4dLf32/9+Mc/toqKiqxp06ZZCxYssD799FPLsizr008/tbKzs609e/b4t//iiy+syspKa9q0adZdd91lrVy5MuCzCCzLsn71q19ZpaWl1u23326VlZX5P5fAFMFknjdvnpWdnX3Vr4FtLl++bNXV1Vn33XefNXXqVOv++++3du/ePWL5riXYY33kyBGroqLCuvPOO63p06dblZWV1smTJwPGtNOxHvDAAw9YNTU1Vx0vWo71gB/+8IcBnzNh13P6q66X207n9YChHGs7nNNXGkpmy7LXOX0lh2VZ1kiXJQAAgKuJiWdUAABAdKKoAAAAY1FUAACAsSgqAADAWBQVAABgLIoKAAAwFkUFAAAYi6ICAACMRVEBAADGoqgAAABjUVQAAICxKCoAAMBY/w+754JrbhjneQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seaborn.set()\n", "plt.hist(inches)" ] }, { "cell_type": "markdown", "id": "7c530b44-96d0-41f6-bda0-2f0296ac51a0", "metadata": {}, "source": [ "### 2.6.2 比较通用函数\n", "- 结果是bool数据类型数组\n", "- 使用运算符时候,np内部会转为通用函数" ] }, { "cell_type": "code", "execution_count": 94, "id": "3a379432-4c60-445f-94d9-c1c77c94791b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, True, False, False, False])" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(6)\n", "x < 3\n", "(x * 2) == (x ** 2)\n", "np.less(x, 3) # " ] }, { "cell_type": "code", "execution_count": 96, "id": "249ed744-7c4c-4f08-aad7-94d4729bafd4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ True, False, False, False],\n", " [False, False, False, True],\n", " [False, False, True, False]])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(10, size = (3, 4))\n", "x < 3" ] }, { "cell_type": "markdown", "id": "a97b87a7-d38d-4c85-91cf-e0189385d420", "metadata": {}, "source": [ "### 2.6.3 bool数组用处\n", "条件统计个数" ] }, { "cell_type": "code", "execution_count": 6, "id": "11346918-73b0-4452-9f63-fd674d023bdf", "metadata": {}, "outputs": [], "source": [ "x = np.arange(6)" ] }, { "cell_type": "code", "execution_count": 9, "id": "bdbc6ad6-fe4e-4a6b-adb0-1103a0921dfd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0, 1, 4]),)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.array([1, 2, 0, 0, 4, 0])\n", "indices = np.nonzero(arr) # 返回非0值的索引\n", "indices" ] }, { "cell_type": "code", "execution_count": 102, "id": "708e8059-de91-4f97-ac2a-78d419806bf0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.count_nonzero(x < 6)" ] }, { "cell_type": "code", "execution_count": 103, "id": "acd225f2-2fe1-4ac6-ad38-1f6db2edb1db", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(6)" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x < 6)" ] }, { "cell_type": "code", "execution_count": 105, "id": "312a729c-7105-4f0a-b16c-3cdd000765b8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.int64(6)" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x < 6, axis = 0)" ] }, { "cell_type": "code", "execution_count": 107, "id": "271ca716-60c6-4b87-9ebb-fb54598a6e80", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.False_" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.any(x <8 )\n", "np.all(x > 0)\n" ] }, { "cell_type": "code", "execution_count": 109, "id": "fd015e44-b5d8-462c-aa6f-06618d9a1f08", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number days without rain: 215\n", "Number days with rain: 150\n", "Days with more than 0.5 inches: 37\n", "Rainy days with < 0.1 inches : 75\n" ] } ], "source": [ "print(\"Number days without rain: \", np.sum(inches == 0))\n", "print(\"Number days with rain: \", np.sum(inches != 0))\n", "print(\"Days with more than 0.5 inches:\", np.sum(inches > 0.5))\n", "print(\"Rainy days with < 0.1 inches :\", np.sum((inches > 0) & (inches < 0.2)))" ] }, { "cell_type": "markdown", "id": "d1b22423-252d-48e2-a25f-645083c859f6", "metadata": {}, "source": [ "### 2.6.4 将布尔数组作为掩码 ,筛选子集\n", "- 掩码操作返回的是一维数组!" ] }, { "cell_type": "code", "execution_count": 116, "id": "f684a104-0690-4f97-a396-4715eb8e210a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2], dtype=int32)" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(10, size = (3,3))\n", "x < 5\n", "x[x<5]" ] }, { "cell_type": "markdown", "id": "e9ed6362-2013-4826-9a76-2e8f44168090", "metadata": {}, "source": [ "## 2.7 花哨的索引\n", "- 花哨索引传递的是索引数组,而不是单个标量。 因此能够快速获取子集\n", "- 结果与索引数组形状一样" ] }, { "cell_type": "code", "execution_count": 121, "id": "187aed61-d3c7-4bb5-a1a8-e3eba3988291", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3])" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(6)\n", "ind = [1,2,3]\n", "x[ind]" ] }, { "cell_type": "code", "execution_count": 123, "id": "99a3317c-3752-4ddf-a7e8-c66ada773305", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2],\n", " [2, 3]])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ind = np.array([\n", " [1,2],\n", " [2,3]\n", "])\n", "x[ind]" ] }, { "cell_type": "code", "execution_count": 131, "id": "2fbdc2a3-1c5a-4b41-83eb-18638a25159f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 4, 11])" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(12).reshape((3,4))\n", "row_ind = np.array([1,2])\n", "col_ind = np.array([0,3])\n", "x[row_ind, col_ind] # (1,0), (2,3) 位置" ] }, { "cell_type": "code", "execution_count": 133, "id": "28455c0d-957c-4fc6-938c-1298f0547e98", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 4, 7],\n", " [ 8, 11]])" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[row_ind[:, np.newaxis], col_ind] # 索引数组形状不匹配,需要广播规则先匹配" ] }, { "cell_type": "markdown", "id": "f731a355-0c98-42c0-8d5f-26fe8b48215f", "metadata": {}, "source": [ "### 2.7.2 组合索引" ] }, { "cell_type": "code", "execution_count": 136, "id": "a3dd3857-43e1-470d-88f2-a70131440be8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11]])" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(12).reshape((3,4))\n", "x" ] }, { "cell_type": "code", "execution_count": 137, "id": "12039424-903a-4d99-854d-5f97c5b56cb8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([10, 8, 9])" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[2, [2,0,1]]" ] }, { "cell_type": "code", "execution_count": 138, "id": "90329657-0496-4ab0-b469-87d7fbd353c7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 6, 4, 5],\n", " [10, 8, 9]])" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[1:, [2,0,1]]" ] }, { "cell_type": "markdown", "id": "18b2e1ba-1a7c-4990-9b01-116624a26b03", "metadata": {}, "source": [ "### 2.7.3 示例:选择随机点 .\n", "场景:从矩阵随机选择行" ] }, { "cell_type": "code", "execution_count": 142, "id": "025d6235-e3c6-434a-95d0-e5fb19487b64", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(100, 2)" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean = [0,0]\n", "cov = [[1,2], [2,5]]\n", "x = np.random.multivariate_normal(mean, cov, 100)\n", "x.shape" ] }, { "cell_type": "code", "execution_count": 143, "id": "1fcbd39b-288c-4995-8752-efe36ce43123", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn; seaborn.set() # 设置绘图风格" ] }, { "cell_type": "code", "execution_count": 145, "id": "aa131e4d-d79a-4a66-aeba-679c2dd185ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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aiZgevkwzZ5xurbuOBh1Z9VUF9jGCrU9wzYWAMAOabUiEpDh9Wji6UWaOWm4ysf5CEL6YBsLABAvaRmIILxUPmkYAJA40m5rBtal6knDAIDEQSCCkFLxpGEAQOJgawYAALiGQAQAALiGQAQAALiGQAQAALiGQAQAALiGQAQAALiGQAQAALiGQAQAALiGQAQAALjGYxiG4fYgwjEMQ36/fcPMyPCqs9Nv2/1SBfNijnkxx7yYY17MMS/mUnlevF6PPJ7wR4IkRSACAABSE1szAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANQQiAADANWkbiOzfv18333yzKisrVVlZqTvuuEOHDh1ye1iu++yzz3TnnXfq/PPP1/Tp07Vo0SLt2rXL7WEllPvuu0/33HOP28Nwhd/v1y9+8QtdcMEFmjp1qr7zne9o3759bg8roaxevVoLFixwexgJobm5Wf/0T/+kr371q/qrv/orzZs3T9u3b3d7WK47fPiw7r77bs2cOVMVFRW68cYbtXv3breH5Zq0DETa2tp0/fXXS5I2bNigdevW6YsvvtBNN90kwzDcHZyL2tvbdeONN+rw4cN67LHHtH79ehUUFGjhwoVqbGx0e3iu6+zs1M9+9jO98MILbg/FNatXr9azzz6rBx98UM8995w8Ho9uuOEGtbe3uz20hLB27Vr94he/cHsYCePOO+/Ujh07tHz5cr3wwgs666yztGjRIv3pT39ye2iuuvnmm3XgwAE98cQTeuGFF5Sbm6vrr79eJ06ccHto7jDS0J///Gfj9ttvNw4fPtz92qZNm4zS0tJer6Wbt956yygtLTUOHTrU/VpbW5sxdepU4/nnn3dxZO7bvXu38Xd/93fGzJkzjYsuusj4wQ9+4PaQ4q6trc2oqKgw1q9f3/3akSNHjClTphgbN250cWTuO3TokLFo0SLjnHPOMf76r//auO6669wekuv27t1rlJaWGtXV1d2v+f1+Y86cOcbKlStdHJm7GhsbjTvuuMOor6/vfu3jjz82SktLjR07drg4Mvek5YrIGWecoUceeURFRUWSpIMHD2r9+vU666yz5PP5XB6de0pKSvT444+ruLi41+uGYejIkSMujSoxvPfee5o4caI2btyo0aNHuz0cV9TW1urYsWOaOXNm92uFhYWaNGmStm3b5uLI3PfRRx9p0KBB+o//+A9NnTrV7eEkBJ/Pp8cff1yTJ0/ufs3j8aT9vyc+n0/Lly9XSUmJJOnLL7/UU089peHDh2vChAkuj84dmW4PwG3f+c539NZbb2nQoEH61a9+JY/H4/aQXDN06FBdeOGFvV57+umn1dbWpvPPP9+lUSWGefPmuT0E1wVyqEaMGNHr9WHDhumzzz5zY0gJ4+KLL9bFF1/s9jASSmFhYb9/T1577TXt379fs2bNcmlUieVHP/qRfvOb3yg7O1tr1qzRgAED3B6SK1IyEDl48KBmz54d9P0tW7Zo6NChkqS7775b//AP/6A1a9bo+uuvV1VVVb9/aFNFJPMiSb/73e+0YsUKLViwQOXl5fEYoisinZd0Fdi/zs7O7vV6Tk5OWv+EC2uqq6v1wx/+ULNnzyZo+4uFCxfqmmuu0YYNG3TLLbd0r8ynm5QMRIqLi/Xqq68GfT+wJSNJEydOlCStWLFCF110kV588UXdeuutjo/RDZHMy4YNG7RkyRJddtlluvfee+MxPNdEMi/pLDc3V1JXUnPgv6Wu5O+8vDy3hoUksHnzZt11112aOnWqli9f7vZwEkZgK2bJkiX64IMP9Mwzz+inP/2py6OKv5QMRLKysjR+/Pig73/yySfauXOnLr300u7X8vLyNHr0aDU0NMRjiK4INy8By5Yt0xNPPKEFCxbovvvuS/ntKqvzku4CK4UNDQ0aO3Zs9+sNDQ0pvWKG2DzzzDN66KGHNGfOHC1btqzfilq6OXz4sN555x19/etfV0ZGhiTJ6/Vq/PjxKf35E0paJqt+/PHHuv3227V///7u11paWrRnz560/0BaunSpnnjiCS1evFj3339/ygchsK68vFwDBw7U1q1bu19raWlRTU2NKisrXRwZEtX69eu1ZMkSXXvttVq5cmXaByFSV+D+/e9/X++99173ax0dHaqpqUnbz5+UXBEJ56tf/arKysq0ePFi/ehHP5JhGFq6dKl8Pp/+9m//1u3huWbr1q168skntWDBAl155ZX64osvut8bMGCA8vPzXRwd3Jadna3rrrtOy5YtU1FRkUaNGqWlS5dq+PDhmjNnjtvDQ4LZs2ePfvKTn2jOnDm66aabdPjw4e73cnNzVVBQ4OLo3FNeXq5Zs2bpn//5n/Xggw+qsLBQv/zlL9XS0tLd3yrdpGUgkp2drSeffFI/+9nPtGjRIrW3t2vWrFl6+OGHNXDgQLeH55qNGzdKktatW6d169b1eu/WW2/Vbbfd5sawkEBuv/12nTp1Svfff79Onjyp6dOn66mnnuInXfTz+uuvq6OjQ5s2bdKmTZt6vTd37lw9/PDDLo3MXR6PRytXrtS//Mu/6B//8R/V2tqqyspK/frXv9bIkSPdHp4rPIaRxq1EAQCAq9IyRwQAACQGAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOAaAhEAAOCa/w/CWO+hLrF1xgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(x[:,0], x[:,1])" ] }, { "cell_type": "code", "execution_count": 153, "id": "47232f43-dc1d-4280-8c07-e5be4c4223d9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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zzR1+IxpLACAnTImiGRKiXY7MI0FAEiUjAkimVCi3S7RTGMBANAdGRNE0r1Eu52YxgIAJErGBBGptSrqnd8Yo4I+vTpcT4cS7XZiGgsAkCgZs2smaGJZP0254kJte7825sqq6S44jRVueoZpLACAHTJqRCQoy+3SyAt9unJUf5UN9RJCOmEaCwCQKBkZRBBZOp80DABIHhk3NQPr0vWkYQBA8iCIIKx0PGkYAJA8mJoBAACOIYgAAADHEEQAAIBjCCIAAMAxBBEAAOAYgggAAHAMQQQAADiGIAIAABxDEAEAAI5xBQKBgNONiCQQCMgw7GtmVpZbLS2Gbc9LF/SLOfrFHP1ijn4xR7+YS+d+cbtdcrkiHwmSEkEEAACkJ6ZmAACAYwgiAADAMQQRAADgGIIIAABwDEEEAAA4hiACAAAcQxABAACOIYgAAADHEEQAAIBjCCIAAMAxBBEAAOAYgggAAHAMQQQAADgmY4NITU2Nbr/9dk2YMEETJkzQ9773PX388cdON8txhw4d0t13363PfOYzmjhxombNmqU9e/Y43aykcv/99+u+++5zuhmOMAxDP/vZz/TZz35WY8eO1be//W3t27fP6WYllSeffFLl5eVONyMpHDt2TP/8z/+sz33uc/r0pz+tmTNn6t1333W6WY6rr6/XPffcoyuvvFLjx4/X3Llz9Ze//MXpZjkmI4PIuXPn9M1vflOStHbtWq1evVpHjhzRd77zHQUCAWcb56Dz589r7ty5qq+v1y9+8QutWbNG+fn5uu2229TQ0OB08xzX0tKihx56SC+99JLTTXHMk08+qeeff15Lly7VCy+8IJfLpTlz5uj8+fNONy0pPPPMM/rZz37mdDOSxt133633339fjz76qF566SVdcsklmjVrlv7617863TRH3X777dq/f79Wrlypl156Sb169dI3v/lNnTlzxummOSOQgT788MPAXXfdFaivr2+7tnnz5sDw4cM7XMs0b731VmD48OGBjz/+uO3auXPnAmPHjg28+OKLDrbMeX/5y18Cf/d3fxe48sorA5MnTw7ce++9Tjcp4c6dOxcYP358YM2aNW3Xjh8/HhgzZkxgw4YNDrbMeR9//HFg1qxZgXHjxgW++MUvBm699Vanm+S4jz76KDB8+PBAZWVl2zXDMAJTp04NPP744w62zFkNDQ2B733ve4Hdu3e3Xfvggw8Cw4cPD7z//vsOtsw5GTki8qlPfUo//elP5fP5JEm1tbVas2aNLrnkEnm9Xodb55zS0lKtWLFCxcXFHa4HAgEdP37coVYlh7ffflsjR47Uhg0bVFJS4nRzHLFr1y6dOnVKV155Zds1j8ejUaNG6Z133nGwZc7785//rD59+ug///M/NXbsWKebkxS8Xq9WrFih0aNHt11zuVwZ/+eJ1+vVo48+qtLSUknS0aNH9fTTT6t///66+OKLHW6dM7KdboDTvv3tb+utt95Snz599Mtf/lIul8vpJjmmqKhI11xzTYdrzz77rM6dO6fPfOYzDrUqOcycOdPpJjguuIZqwIABHa7369dPhw4dcqJJSeMLX/iCvvCFLzjdjKTi8Xi6/Hny2muvqaamRldffbVDrUouP/rRj/Qf//Ef6tGjh5566ildcMEFTjfJEWkZRGprazVlypSQn7/55psqKiqSJN1zzz36p3/6Jz311FP65je/qXXr1nX5gzZdRNMvkrRp0yY99thjKi8vV1lZWSKa6Iho+yVTBeeve/To0eF6z549M/pvuLCmsrJSP/zhDzVlyhRC29/cdtttuummm7R27VrNmzevbWQ+06RlECkuLtbGjRtDfh6ckpGkkSNHSpIee+wxTZ48Wb/+9a91xx13xL2NToimX9auXaslS5Zo+vTpmj9/fiKa55ho+iWT9erVS1Lroubg/5ZaF3/n5uY61SykgC1btugHP/iBxo4dq0cffdTp5iSN4FTMkiVLtH37dj333HN64IEHHG5V4qVlEMnJydGwYcNCfn7gwAHt3LlT1113Xdu13NxclZSUqK6uLhFNdESkfgl65JFHtHLlSpWXl+v+++9P++kqq/2S6YIjhXV1dRoyZEjb9bq6urQeMUP3PPfcc/rxj3+sqVOn6pFHHukyopZp6uvrtXXrVn3pS19SVlaWJMntdmvYsGFp/f0TTkYuVv3ggw901113qaampu2a3+/X3r17M/4L6eGHH9bKlStVUVGhBQsWpH0IgXVlZWXq3bu3tm3b1nbN7/erqqpKEyZMcLBlSFZr1qzRkiVLdMstt+jxxx/P+BAitQb373//+3r77bfbrjU1Namqqipjv3/SckQkks997nMaMWKEKioq9KMf/UiBQEAPP/ywvF6vvv71rzvdPMds27ZNq1atUnl5ub7yla/oyJEjbZ9dcMEFysvLc7B1cFqPHj1066236pFHHpHP59OgQYP08MMPq3///po6darTzUOS2bt3r37yk59o6tSp+s53vqP6+vq2z3r16qX8/HwHW+ecsrIyXX311Vq8eLGWLl0qj8ejn//85/L7/W31rTJNRgaRHj16aNWqVXrooYc0a9YsnT9/XldffbUefPBB9e7d2+nmOWbDhg2SpNWrV2v16tUdPrvjjjt05513OtEsJJG77rpLzc3NWrBggc6ePauJEyfq6aef5m+66OL1119XU1OTNm/erM2bN3f47IYbbtCDDz7oUMuc5XK59Pjjj+tf/uVf9L//9//WiRMnNGHCBP3qV7/SwIEDnW6eI1yBQAaXEgUAAI7KyDUiAAAgORBEAACAYwgiAADAMQQRAADgGIIIAABwDEEEAAA4hiACAAAcQxABAACOIYgAAADHEEQAAIBjCCIAAMAx/x8yy8QGoVzveQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "indices = np.random.choice(x.shape[0], 20, replace=False)\n", "selection = x[indices]\n", "plt.scatter(x[:,0], x[:,1])\n", "plt.scatter(selection[:,0], selection[:, 1], facecolor = 'red')" ] }, { "cell_type": "code", "execution_count": null, "id": "2dd3c736-085d-41be-92e7-88a4cc10b4cb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b5dbc3b6-f980-4fc5-ab77-c125b83b4b28", "metadata": {}, "source": [ "### 2.7.4 用花哨的索引修改部分数组" ] }, { "cell_type": "code", "execution_count": 173, "id": "11245499-6edf-4222-9ed7-e5808c66dd2a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.arange(10)\n", "x" ] }, { "cell_type": "code", "execution_count": 174, "id": "f0ed0a58-52b8-4e5c-af90-cf584559a671", "metadata": {}, "outputs": [], "source": [ "ind = np.array([2,1,8,4])" ] }, { "cell_type": "code", "execution_count": 178, "id": "f2a06aa0-a3ad-4764-8283-d90cf0b5d685", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 99, 99, 3, 99, 5, 6, 7, 99, 9])" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[ind] = 99\n", "x" ] }, { "cell_type": "code", "execution_count": 181, "id": "137fbe2e-c701-4f78-b217-46197a3b7a14", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 102, 102, 3, 102, 5, 6, 7, 102, 9])" ] }, "execution_count": 181, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.add.at(x, ind, 1) # 原地操作, 对索引处加1\n", "x" ] }, { "cell_type": "markdown", "id": "c1afd595-3a80-4229-8f4c-d5fe29a59cd5", "metadata": {}, "source": [ "### 2.7.5 示例:数据区间划分\n", "\n", "手动计算直方图分布" ] }, { "cell_type": "code", "execution_count": 184, "id": "e61546ef-baa2-4b75-ba51-4480578616e6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(100,)" ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randn(100)\n", "x.shape" ] }, { "cell_type": "code", "execution_count": 187, "id": "79208677-6e3d-4da8-8f95-b15e7df07bbe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0., 0., 0., 0., 1., 4., 19., 20., 22., 14., 13.,\n", " 7., 0., 0., 0., 0., 0., 0.])" ] }, "execution_count": 187, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bins = np.linspace(-5, 5, 20)\n", "counts = np.zeros_like(bins) # 创建形状相同的全0数组\n", "\n", "i = np.searchsorted(bins, x) # 查找一个元素在已排序数组中的插入位置\n", "np.add.at(counts, i, 1)\n", "counts" ] }, { "cell_type": "code", "execution_count": 191, "id": "2a8f4c3b-39cb-4271-a81e-e5fb28bf00bc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 191, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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usH7OXYY677p80eWdevW6eabb9Y555yjefPm6b//+7/l9Xq7HOPz+SRJgUCgzwW6XJZyczP6/POJyO9PM11CUmCcj+/DHYf00+fe1Z7Ktlto50wdohu+dKLSU3t+B0t/xjk3V7ry8zl9/vlkwvs5dhjr3ulTEHnttdd00003adq0abr33nslSampqQoGg12O6wgg6enpfS4wErFVV9fU559PJG63S35/murqmhUOR0yXk7AY5557fd1u7alsUHamV/9x3gTNmlCgQHNQgebgcX+WcY4Nxjl2GOvD/P60Hs8M9TqI/PrXv9Zdd92l+fPna+nSpZ2zIEVFRTpw4ECXYzu+Liws7O3LdBEKJfc/6CeFwxHGJAYY56MLtIblS3FLkj536kjJli6YU6qM1JQ+jVd/x7mhuVVbP65RxJZmjM/v8/MkOt7PscNY906vLmQ99dRTuuOOO/Tv//7v+slPftLlUsysWbO0bt06hcPhzsfefvttjRw5sl/rQwA4Q11jUA+++IGWPvOOIhFbkuTzunXp2WOU0YtLMdG2tbxGP12xQS++Rat3IB71OIjs3LlTP/zhDzV//nxdc801OnTokCorK1VZWan6+npdcsklamho0JIlS7Rt2zatWLFCTzzxhK655pqBrB/AALNtW6s27NOSh/+pf208oB1767R9b63psjqVtvcS2XuwSa2h8HGOBuA0Pb408+qrr6q1tVUrV67UypUru3xvwYIFuvvuu/XII4/orrvu0oIFC5Sfn6/FixdrwYIFUS8aQGwcrGnWr17drA92VkmSSgoydeUFEztvm3WC3CyfstJTVN/UqvLKRo0c4jddEoBe6HEQufbaa3Xttdce85gTTjhBzz77bL+LAmBWJGLrL+vKteKNHQq0huVxu/T500fosyeXyOOwWxMty1JJYZY+3Fmlsv31BBEgzrDpHYBPsWXrHx/sV6A1rHHDc3TF+RNUlNf3u98GWmlHEKHDKhB3CCIAJEmt7av8UzwuuV0uXXH+BO3cX6czpw2V6zjNyUyjwyoQvwgiALStvFaPvbJRM8cXaEH7brmlRVmOWgtyLKWFmZKk8soGhcIRx10+AtA9ggiQxJoDIa14fYf+ur5ctqS3NuzThXNK5W3vExIv8nPS9PXPTVJpYZZcLmfP3gDoiiACJKn3tx/Sr17dpKq6tg7Ip08don+bNybu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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(bins, counts, linestyle = '--')" ] }, { "cell_type": "markdown", "id": "d4cd39c2-5057-4577-bf76-1126775a743d", "metadata": {}, "source": [ "## 2.8 数组的排序" ] }, { "cell_type": "code", "execution_count": 199, "id": "b47139ef-da4f-42ed-af84-fbd77942d880", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 1, 4, 3, 5])" ] }, "execution_count": 199, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([2, 1, 4, 3, 5])\n", "x" ] }, { "cell_type": "code", "execution_count": 200, "id": "25c6e00c-145a-4cf7-8deb-4e1f18239aa3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5])" ] }, "execution_count": 200, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sort(x) # 非原地\n", "x.sort() # 原地排序\n", "x" ] }, { "cell_type": "code", "execution_count": 203, "id": "73ae026a-29ac-4dcf-9c6f-a9ba5553c0d6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 3, 2, 4])" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([2, 1, 4, 3, 5]) \n", "np.argsort(x) # 返回的是对应的索引数组" ] }, { "cell_type": "markdown", "id": "3a742067-2392-43cb-a5b3-8c0a98fdf190", "metadata": {}, "source": [ "### 多维数组,axis沿着行列排序" ] }, { "cell_type": "code", "execution_count": 205, "id": "a930241d-99dc-4c02-9977-7730d82d2148", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 3, 1, 8, 4],\n", " [2, 1, 8, 4, 6, 3],\n", " [2, 8, 0, 1, 8, 4],\n", " [2, 8, 7, 3, 4, 3]], dtype=int32)" ] }, "execution_count": 205, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(10, size=(4,6))\n", "x" ] }, { "cell_type": "code", "execution_count": 207, "id": "42750ef2-8f6c-461f-9063-3f25cf91734a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 0, 1, 4, 3],\n", " [2, 1, 3, 1, 6, 3],\n", " [2, 8, 7, 3, 8, 4],\n", " [2, 8, 8, 4, 8, 4]], dtype=int32)" ] }, "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sort(x, axis=0) # 对每一列排序" ] }, { "cell_type": "code", "execution_count": 209, "id": "c86b9190-fed2-4c21-9ead-466a21397c2a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 1, 3, 4, 8],\n", " [1, 2, 3, 4, 6, 8],\n", " [0, 1, 2, 4, 8, 8],\n", " [2, 3, 3, 4, 7, 8]], dtype=int32)" ] }, "execution_count": 209, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sort(x, axis=1) #对每一行排序," ] }, { "cell_type": "markdown", "id": "7e09f664-0519-47fd-a834-e050f891292f", "metadata": {}, "source": [ "### 2.8.2  部分排序:分隔\n", "场景:不需要整个排序,而是找到第K小的值。\n", "\n", "np.partition(x, k) 前k小的值按序排在前面k个位置" ] }, { "cell_type": "code", "execution_count": 214, "id": "363f787c-e9ac-418f-af38-061c4b325b6a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 4, 3, 9, 6, 5, 4])" ] }, "execution_count": 214, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([2, 4, 3, 9, 6, 5, 4])\n", "x" ] }, { "cell_type": "code", "execution_count": 215, "id": "be2225ae-a973-4450-9574-c1a36e2c3d4f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 3, 4, 4, 5, 6, 9])" ] }, "execution_count": 215, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.partition(x, 5)" ] }, { "cell_type": "code", "execution_count": 218, "id": "79a2f4fd-1bb0-4831-92e5-1616dd291586", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[3, 3, 5, 6, 9, 9],\n", " [0, 3, 4, 5, 6, 8],\n", " [2, 4, 4, 6, 7, 9],\n", " [0, 1, 1, 3, 4, 6]], dtype=int32)" ] }, "execution_count": 218, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(10, size=(4,6))\n", "np.partition(x, 2, axis=1) # axis1行内操作" ] }, { "cell_type": "markdown", "id": "e0c1aeae-49e4-41ae-b450-5abbfe177ef6", "metadata": {}, "source": [ "### 2.8.3 示例:K个最近邻\n", "快速找到一个点的k近邻" ] }, { "cell_type": "code", "execution_count": 220, "id": "7f8bc733-2fc0-4617-8c92-6719851e5e5a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.71794584, 0.96522075],\n", " [0.08970508, 0.0141406 ],\n", " [0.74454675, 0.87301855],\n", " [0.50080051, 0.64035131],\n", " [0.09262789, 0.13543144],\n", " [0.81374851, 0.43364737],\n", " [0.2016323 , 0.5009637 ],\n", " [0.02829625, 0.48445052],\n", " [0.55959898, 0.37555239],\n", " [0.38208126, 0.20930041]])" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.rand(10,2)\n", "x" ] }, { "cell_type": "code", "execution_count": 221, "id": "26935390-f7c8-4743-9328-4b32f71ef63a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 221, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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n540X8u8vDylpqZGnLZJS0vTjBkzrL79e6T/xr7++usKh8NatmzZuM43FpxmrK+v1+zZszVx4sTBtUmTJmn27Nk6evTouM46lIQoJkVFRZo4caL2798/uNbV1aVDhw6prKwsan95eblaW1sj7t0eeN958+aN/8Aj4DRjohpJzk2bNumnP/2pHnnkEd10002xGnXEnGZ8/fXXddttt0UcOn3//ffV0dFh7Tl7pxlfeeUVvfzyy3rxxRf14osvauvWrZKkJ554wuprpZzmrK2t1YIFC3T69OnBtZMnT+ro0aPWXhDrNGNZWZnOnj2rd955Z3Dt9OnTam5u1syZM2My80iM9N/Y+vp6XXrppQoEArEYc1ScZpw6daqOHTsWcZqnt7dXx48fj+/XMm73Azn07W9/21RUVJi6urrBe7M///nPm1AoZM6ePWuCwaDp7e01xhgTDofNddddZ5YvX25+85vfmDfeeMNcddVV5u67745ziqE5yfhpV111VULcLmyMs5y7d+82BQUF5l/+5V+inilwoc+FDZxkbG9vN4sWLTK33nqraWxsNAcOHDBf+tKXzIoVK6x+9sVovl9/+ctfJsTtwsY4y/nhhx+a8vJys379etPY2Gjefvttc8MNN5ilS5cmzferMcbccMMN5uqrrzYHDhwwTU1NZv369WbhwoXm97//fRxT/O9G8j3713/912bz5s1xmtg5Jxnb2tpMRUWFufXWW83hw4fN4cOHzdq1a82iRYvMiRMn4pYhYYrJ2bNnzbe+9S1TWVlpLr/8crNmzZrBf9Sam5tNQUGB2b179+D+jz/+2Kxfv95cfvnlZsGCBebee++1+oFcxjjP+EmJVEyc5LzxxhtNQUHBeX9d6HNhA6dfy//+7/82t9xyi5k/f76pqKgw99xzT1z/YRiO0Xy/JlIxcZrz0KFDZvXq1Wb+/Plm3rx5Zv369ebDDz+M1/jD4jRjd3e3uffee82CBQtMSUmJufHGG01TU1O8xh+2kXzPXn311Wb79u3xGHdEnGZ87733zNq1a01FRYWprKw0X/3qV+P+99JjjDHxO14DAADwPxLiGhMAAOAOFBMAAGANigkAALAGxQQAAFiDYgIAAKxBMQEAANagmAAAAGtQTAAAgDUoJgAAwBoUEwAAYA2KCQAAsMb/B+APSpvVzO2KAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn; seaborn.set() # 设置绘图风格\n", "plt.scatter(x[:, 0], x[:, 1])" ] }, { "cell_type": "code", "execution_count": 230, "id": "8baf1bc4-5088-4dff-8724-475b6900af14", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10, 1, 2)" ] }, "execution_count": 230, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[:, np.newaxis, :].shape" ] }, { "cell_type": "code", "execution_count": 233, "id": "8230b9de-2e83-406a-92aa-66b33a4b426a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 10, 2)" ] }, "execution_count": 233, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x[np.newaxis,:,:].shape" ] }, { "attachments": { "020354d9-27b4-4761-8c5d-ed70eeddce46.png": { "image/png": "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" }, "0c3d0097-6afe-432a-9f10-84a2b934eef1.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "3d0d188b-badf-4c75-aa71-da1b2d75ff4a", "metadata": {}, "source": [ "![image.png](attachment:020354d9-27b4-4761-8c5d-ed70eeddce46.png)\n", "![image.png](attachment:0c3d0097-6afe-432a-9f10-84a2b934eef1.png)\n" ] }, { "cell_type": "code", "execution_count": 242, "id": "d10d2c18-3c3a-4fb1-92c7-cba8ef89a0a0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 1.29923992, 0.00920885, 0.15269225, 1.07957284,\n", " 0.29174841, 0.48211429, 0.70675659, 0.37278251, 0.68422058],\n", " [1.29923992, 0. , 1.16648895, 0.56113931, 0.01472001,\n", " 0.70022482, 0.24952443, 0.22496247, 0.35141876, 0.12357118],\n", " [0.00920885, 1.16648895, 0. , 0.11354627, 0.96903294,\n", " 0.19783592, 0.43318091, 0.6639999 , 0.28167826, 0.571903 ],\n", " [0.15269225, 0.56113931, 0.11354627, 0. , 0.42154896,\n", " 0.14066297, 0.10893053, 0.24756534, 0.07357573, 0.19989914],\n", " [1.07957284, 0.01472001, 0.96903294, 0.42154896, 0. ,\n", " 0.60894768, 0.14549579, 0.12595287, 0.27572006, 0.08923987],\n", " [0.29174841, 0.70022482, 0.19783592, 0.14066297, 0.60894768,\n", " 0. , 0.37921774, 0.61951622, 0.06796701, 0.23666818],\n", " [0.48211429, 0.24952443, 0.43318091, 0.10893053, 0.14549579,\n", " 0.37921774, 0. , 0.03031807, 0.14386814, 0.1176293 ],\n", " [0.70675659, 0.22496247, 0.6639999 , 0.24756534, 0.12595287,\n", " 0.61951622, 0.03031807, 0. , 0.2941414 , 0.20087141],\n", " [0.37278251, 0.35141876, 0.28167826, 0.07357573, 0.27572006,\n", " 0.06796701, 0.14386814, 0.2941414 , 0. , 0.05915226],\n", " [0.68422058, 0.12357118, 0.571903 , 0.19989914, 0.08923987,\n", " 0.23666818, 0.1176293 , 0.20087141, 0.05915226, 0. ]])" ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# > differences[i,j] 表示样本距离:是一个n维向量\n", "differences = x[:, np.newaxis, :] - x[np.newaxis,:,:]\n", "sq_differences = differences ** 2\n", "dist_sq = sq_differences.sum(-1)\n", "dist_sq" ] }, { "cell_type": "markdown", "id": "33b6d4a3-c1f1-43dc-b49e-1fea63ba964e", "metadata": {}, "source": [ "有了每个点的距离后,就可以行内排序,每一行主机增大,表示距离增加.\n", "如果用argsort显示索引,就得到了距离远近的点" ] }, { "cell_type": "code", "execution_count": 248, "id": "42feb5b5-a841-470a-8fbd-144af8ba8131", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 2, 3, 5, 8, 6, 9, 7, 4, 1],\n", " [1, 4, 9, 7, 6, 8, 3, 5, 2, 0],\n", " [2, 0, 3, 5, 8, 6, 9, 7, 4, 1],\n", " [3, 8, 6, 2, 5, 0, 9, 7, 4, 1],\n", " [4, 1, 9, 7, 6, 8, 3, 5, 2, 0],\n", " [5, 8, 3, 2, 9, 0, 6, 4, 7, 1],\n", " [6, 7, 3, 9, 8, 4, 1, 5, 2, 0],\n", " [7, 6, 4, 9, 1, 3, 8, 5, 2, 0],\n", " [8, 9, 5, 3, 6, 4, 2, 7, 1, 0],\n", " [9, 8, 4, 6, 1, 3, 7, 5, 2, 0]])" ] }, "execution_count": 248, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nearest = np.argsort(dist_sq, axis = 1)\n", "nearest" ] }, { "cell_type": "markdown", "id": "d15fe295-d695-4f1e-8374-acd84d5c479a", "metadata": {}, "source": [ "如果只需要k近邻,只需要argpartition" ] }, { "cell_type": "code", "execution_count": 251, "id": "e4d4be39-9ee9-4226-a152-f9d4dc848c6e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 2, 3, 5, 8, 6, 9, 7, 4, 1],\n", " [1, 4, 9, 7, 6, 8, 3, 5, 2, 0],\n", " [2, 0, 3, 5, 8, 6, 9, 7, 4, 1],\n", " [3, 8, 6, 2, 5, 0, 9, 7, 4, 1],\n", " [4, 1, 9, 7, 6, 8, 3, 5, 2, 0],\n", " [5, 8, 3, 2, 9, 0, 6, 4, 7, 1],\n", " [6, 7, 3, 9, 8, 4, 1, 5, 2, 0],\n", " [7, 6, 4, 9, 1, 3, 8, 5, 2, 0],\n", " [8, 9, 5, 3, 6, 4, 2, 7, 1, 0],\n", " [9, 8, 4, 6, 1, 3, 7, 5, 2, 0]])" ] }, "execution_count": 251, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nearest_k = np.argpartition(dist_sq, 2, axis=1)\n", "nearest_k" ] }, { "cell_type": "markdown", "id": "4ed75c09-4ca0-4178-93bf-5d3e52ba9dfc", "metadata": {}, "source": [ "## 2.9 结构化数据:NumPy的结构化数组\n", "组织异构数据\n", "\n", "自定义dtype类型\n", "\n", "可以通过索引访问数据" ] }, { "cell_type": "code", "execution_count": 19, "id": "5f3bd509-f5be-4ab1-8e7e-14d9374c4bca", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype([('name', ' 14]['name']" ] }, { "cell_type": "code", "execution_count": 26, "id": "a80b125c-ce9a-4d6c-bd27-6578b2b69366", "metadata": {}, "outputs": [], "source": [ "color_dt = np.dtype([\n", " ('r', np.ubyte),\n", " ('g', np.ubyte),\n", " ('b', np.ubyte),\n", " ('a', np.ubyte),\n", "])" ] }, { "cell_type": "markdown", "id": "8434be75", "metadata": {}, "source": [ "自定义了一种颜色类型: 4个字节" ] }, { "cell_type": "code", "execution_count": 28, "id": "2136ebb5", "metadata": {}, "outputs": [], "source": [ "data = np.zeros((2,2), dtype=color_dt)" ] }, { "cell_type": "code", "execution_count": 30, "id": "6f4422d5", "metadata": {}, "outputs": [], "source": [ "data[0,0 ]= (255,0,0,255)\n", "data[0,1]= (155,10,10,155)" ] }, { "cell_type": "markdown", "id": "c294d6ee", "metadata": {}, "source": [ "可以快速访问各颜色通道" ] }, { "cell_type": "code", "execution_count": 32, "id": "b3d9877f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 10],\n", " [ 0, 0]], dtype=uint8)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['g']" ] }, { "cell_type": "markdown", "id": "5962930d", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "9bb8512e-779d-4d83-a518-36026dba5c52", "metadata": {}, "source": [ "## 2.10 random\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "bb833a1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.21463681054178652" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "np.random.randn() # 标准正态分布\n", "np.random.rand() # 均匀分布" ] }, { "cell_type": "code", "execution_count": 7, "id": "2a7d242a-d6d9-423c-a5d3-c7148f099b55", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-2.55298982, 0.6536186 ],\n", " [ 0.8644362 , -0.74216502],\n", " [ 2.26975462, -1.45436567],\n", " [ 0.04575852, -0.18718385],\n", " [ 1.53277921, 1.46935877],\n", " [ 0.15494743, 0.37816252],\n", " [-0.88778575, -1.98079647],\n", " [-0.34791215, 0.15634897],\n", " [ 1.23029068, 1.20237985],\n", " [-0.38732682, -0.30230275]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng.randn(10, 2)" ] }, { "cell_type": "code", "execution_count": 10, "id": "765425a1-e6bd-44e3-91b3-61747d9e2276", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.70627019, 1.9507754 , -0.50965218, -0.4380743 , -1.25279536,\n", " 0.77749036, -1.61389785, -0.21274028, -0.89546656, 0.3869025 ,\n", " -0.51080514, -1.18063218, -0.02818223, 0.42833187, 0.06651722,\n", " 0.3024719 , -0.63432209, -0.36274117, -0.67246045, -0.35955316,\n", " -0.81314628, -1.7262826 , 0.17742614, -0.40178094, -1.63019835,\n", " 0.46278226, -0.90729836, 0.0519454 , 0.72909056, 0.12898291,\n", " 1.13940068, -1.23482582, 0.40234164, -0.68481009, -0.87079715,\n", " -0.57884966, -0.31155253, 0.05616534, -1.16514984, 0.90082649,\n", " 0.46566244, -1.53624369, 1.48825219, 1.89588918, 1.17877957,\n", " -0.17992484, -1.07075262, 1.05445173, -0.40317695, 1.22244507,\n", " 0.20827498, 0.97663904, 0.3563664 , 0.70657317, 0.01050002,\n", " 1.78587049, 0.12691209, 0.40198936, 1.8831507 , -1.34775906,\n", " -1.270485 , 0.96939671, -1.17312341, 1.94362119, -0.41361898,\n", " -0.74745481, 1.92294203, 1.48051479, 1.86755896, 0.90604466,\n", " -0.86122569, 1.91006495, -0.26800337, 0.8024564 , 0.94725197,\n", " -0.15501009, 0.61407937, 0.92220667, 0.37642553, -1.09940079,\n", " 0.29823817, 1.3263859 , -0.69456786, -0.14963454, -0.43515355,\n", " 1.84926373, 0.67229476, 0.40746184, -0.76991607, 0.53924919,\n", " -0.67433266, 0.03183056, -0.63584608, 0.67643329, 0.57659082,\n", " -0.20829876, 0.39600671, -1.09306151, -1.49125759, 0.4393917 ])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng.normal(size = 100)" ] }, { "cell_type": "code", "execution_count": 5, "id": "e3fb8045-1346-413d-9c05-2b3cb99b4d14", "metadata": {}, "outputs": [], "source": [ "rng = np.random.RandomState(0)" ] }, { "cell_type": "markdown", "id": "9b3da1c0", "metadata": {}, "source": [ "## 2.11 网格化数组\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "db8ecda9", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "X,Y = np.mgrid[0:5, 0:5]\n", "plt.scatter(X,Y, c='red', marker='o') # y 是列索引(横轴),x 是行索引(纵轴)\n", "plt.gca().invert_yaxis() # 翻转 y 轴以符合图像坐标\n", "plt.title(\"Grid Points\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "1594ed15", "metadata": {}, "source": [ "网格移动到坐标中心" ] }, { "cell_type": "code", "execution_count": null, "id": "bc616b7f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAGxCAYAAACqUFbqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAMSxJREFUeJzt3XtwlFWCxuG3CdAJmjQDMUnHBIgKwSHqYFAJChIoIxdZBWV1tFiYRSQ6KKKWGqyR4K5GWS9hRjFiOSDea0lQZmFcUpoESqIDbhAWJKIDEkIiwkIHURMIZ//I0NLm1g3dSR/8PVVf1fTp83Wfwzsz/dbXlziMMUYAAACW6NLZCwAAAAgE5QUAAFiF8gIAAKxCeQEAAFahvAAAAKtQXgAAgFUoLwAAwCqUFwAAYBXKCwAAsArlBYAkafPmzZo+fbrOP/98RUVFKSoqSv3799fMmTO1ceNGvx9n2rRp6tevn19zHQ6HcnNz25yza9cuORwO79GlSxf17t1b48aNU3l5ud/rOiE3N1cOhyPg8yRp27Ztys3N1a5du07pfADBQXkBoJdeeknp6en65JNPNHv2bP3Xf/2XVq1apXvvvVdbt27VZZddpq+++sqvx/rDH/6gFStWBH2Nd999t8rLy7Vu3Trl5eXps88+U2ZmpioqKgJ6nNtvv/2USo/UVF7mz59PeQE6WdfOXgCAzvXRRx/prrvu0vjx47V8+XJ1797de9+oUaP0+9//Xv/5n/+pqKioNh/n+++/V48ePXT++eeHZJ19+vTR0KFDJUlXXnmlLrjgAo0ePVqLFi3Syy+/7PfjJCUlKSkpKSRrBNAxuPIC/MI98cQTioiI0EsvveRTXE42efJkJSYmem9PmzZNZ599trZs2aKsrCxFR0dr9OjR3vt+/rZRXV2dZsyYod69e+vss8/WmDFj9MUXX5zWuk8Uma+//to79uc//1mXXHKJIiMj1atXL02cOFGff/65z3ktvW3Ur18/XXfddXr//fd16aWXKioqSgMHDtSf//xn75ylS5dq8uTJkqTMzEzv21hLly6VJFVUVOi6665TXFycnE6nEhMTNX78eO3Zs+e09gmgOcoL8AvW2NiokpISDRkyRG63O6BzGxoa9E//9E8aNWqU3nvvPc2fP7/FecYY3XDDDXrttdd0//33a8WKFRo6dKjGjh17Wmv/8ssvJUnnnHOOJCkvL0/Tp0/XoEGDVFRUpIULF2rz5s3KyMjQjh072n28zz77TPfff7/mzJmj9957TxdffLGmT5+utWvXSpLGjx+vJ554QpL0wgsvqLy8XOXl5Ro/fryOHDmia665Rt98841eeOEFFRcXKz8/X3369NHhw4dPa58AmuNtI+AXbP/+/frhhx/Ut2/fZvc1NjbKGOO9HRER4XPF4ujRo3r00Uf1u9/9rs3n+O///m+VlJRo4cKFuueeeyRJ11xzjbp3765HHnnE77UeP35cx44dU2Njo7Zu3ars7GxJ0m233aZDhw7p3/7t3zRu3Di9+eab3nNGjhyp/v37Kzc3V2+88Uabj79//3599NFH6tOnjyRpxIgR+uCDD/Tmm29qxIgROuecc9S/f39J0q9//WvvlR9J+vTTT3XgwAG98soruv76673j//zP/+z3/gD4jysvAFqUnp6ubt26eY9nnnmm2Zwbb7yx3ccpKSmR1FQyTnbrrbcGtJ6HHnpI3bp1U2RkpNLT07V792699NJL3m8d/fDDD5o2bZrPOcnJyRo1apQ++OCDdh//N7/5jbe4SFJkZKQGDBjg87ZUay644AL96le/0kMPPaSCggJt27YtoL0BCAzlBfgFi42NVVRUVIsv0G+++aY2bNiglStXtnhujx49FBMT0+5zHDhwQF27dlXv3r19xhMSEgJa6+zZs7VhwwZ9+umn+uqrr1RTU6M77rjD+xySWnzrKzEx0Xt/W36+PklyOp364Ycf2j3X5XKprKxMv/nNbzR37lwNGjRIiYmJmjdvno4ePdru+QACw9tGwC9YRESERo0apTVr1qimpsbnxf/Xv/61JLX6tWB/fyuld+/eOnbsmA4cOOBTEGprawNaa1JSkoYMGdLqc0hSTU1Ns/v27t2r2NjYgJ7rVFx00UV6++23ZYzR5s2btXTpUj322GOKiorSww8/HPLnB35JuPIC/MLl5OSosbFR2dnZIblKkJmZKUnNPnNy8mdTTldGRoaioqL0+uuv+4zv2bNHH374ofebUKfL6XRKUptXYxwOhy655BI999xz6tmzp/7nf/4nKM8N4CdceQF+4a688kq98MILuvvuu3XppZfqjjvu0KBBg9SlSxfV1NSosLBQkvx6i6glWVlZGjFihB588EEdOXJEQ4YM0UcffaTXXnstaHvo2bOn/vCH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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "size = 5\n", "X,Y = np.mgrid[0:size, 0:size].astype(np.float64)\n", "center = size/2\n", "X+= 0.5 - center\n", "Y+= 0.5 - center\n", "plt.scatter(X,Y, c='red', marker='o') # y 是列索引(横轴),x 是行索引(纵轴)\n", "plt.gca().invert_yaxis() # 翻转 y 轴以符合图像坐标\n", "plt.title(\"Grid Points\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b83ba47b", "metadata": {}, "source": [ "旋转坐标系\n" ] }, { "cell_type": "code", "execution_count": null, "id": "5757d2c7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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ed23bZPKy5vvd3S0dPSotGWLNHp0OFpon/Xr/e9xywr2P9jvm27yL5OdHa7W2cvnk3bskMrK5O3bV5Kcuy9rRnv667Kslg7pOsYzzzyjuXPn6tixYy0ul5eXp/z8/EbTCwoKFBsba1PrAAB2OXHihKZMmaLKykrFxcW16bltrqCaC5H6du3apVGjRrV11brnnns0b9684OOqqiqlpKQoKytLiYmJbV5fp3LakVbh8eMaO3as3E79TFDgqFqSLEvemBgVPv20xs6YIXdNjbRypbOOqrdtO3Vaq55gv2+80d/vDRucVUFFar/rV43favAef/JJZ72/W1BeXn7Wz21zQN1yyy26/vrrW1wmNTX1rBrj8Xjk8XgaTXe73c7dUQe43f7z85L/tNbGjc7ud+DDx7fd1mDQgDshQe6HH3beh5PHjJESE6UjR5q8DuX++mu5k5L8y0VFhaGBNikrk2pqmp3trqnxB1RZmXM+oB243njiRJOz3TU1cs+dK02a5KzXuhnt2Ye1OaCSkpKUlJR01hsEgnJy/H+kgW+SkKQ9e6To6PC2yw5RUf7rjZMn+we/NHVmffFi5+2wInGkaltGqWZmhqxZnZGto/iKi4u1e/duFRcXy+fzaffu3dq9e7e++uorOzeLziQqyv9HOnnyqcdOlZMjvfiiNGBA43krVzqvapQic6RqJI5StYmto/juu+8+/eY3vwk+/v73vy9JKioqUiZHDohEp1eN/fpJVVXOvR4RiZVjJFaNNrG1gnrmmWdkWVajG+GEiBaoGn/2M2cNDGhOpFWOkVg12oTv4gNgv5wc6eBBqahIKijwj9qTnFk5BqpGqfmQclrVaBMCCkBoRFLlGGlVo02M+iYJAHCMSLveaAMCCgDsEqgapeDnG9F6nOIDABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYiYACABiJgAIAGImAAgAYqWu4GxDxfD5p61aptFRK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9M4772j06NHq1auX/vrXv+q+++7Tueee26rqCQAQ2Wz7HFRMTIzWrFmjq666SsOGDdONN96oiy66SJs3b5bH42nVOjwej3Jzc1u9vFNEYr8jsc8S/Y6kfkdin6X29bvN16AAAAgFvosPAGAkAgoAYCQCCgBgJAIKAGAkAgoAYKROE1CR+NtSBw8e1IwZMzRkyBDFxMTo3HPPVW5urk6ePBnuptnuwQcfVHp6umJjY9v89SidxdKlSzVkyBBFR0dr5MiR2rp1a7ibZLstW7YoOztb/fv3l8vl0ssvvxzuJtnuoYce0qWXXqoePXqoT58+uuaaa7Rv375wN8tWTzzxhEaMGKG4uDjFxcUpLS1Nv//979u8nk4TUJH421J79+5VXV2dli1bpo8++kj/9V//pV//+teaP39+uJtmu5MnT+q6667T7Nmzw90UW6xevVpz587Vvffeq/fff18ZGRmaMGGCiouLw900W1VXV+viiy/Wr371q3A3JWQ2b96sOXPmaOfOnSosLNQ333yjcePGqbq6OtxNs83AgQP18MMP691339W7776rv/3bv9WkSZP00UcftW1FZ/UV5QZYt26d5XK5rJMnT4a7KSG1cOFCa8iQIeFuRsisWLHCio+PD3czOtxll11mzZo1q8G0888/37r77rvD1KLQk2StXbs23M0Iuc8//9ySZG3evDncTQmpXr16WcuXL2/TczpNBVVfa35byqkqKyuVkJAQ7magHU6ePKn33ntP48aNazB93Lhx2r59e5hahVAJ/M5dpPwd+3w+Pffcc6qurm7z19x1qoC666671L17dyUmJqq4uFjr1q0Ld5NC6pNPPtFjjz2mWbNmhbspaIejR4/K5/Opb9++Dab37dtXZWVlYWoVQsGyLM2bN0+jR4/WRRddFO7m2OpPf/qTzjnnHHk8Hs2aNUtr167VhRde2KZ1hDWg8vLy5HK5Wry9++67weXvuOMOvf/++3rjjTcUFRWlf/iHfzi7X2kMs7b2W5JKSko0fvx4XXfddZo5c2aYWt4+Z9NvJzv9N9Esy2ryd9LgHLfccov27NmjVatWhbspths2bJh2796tnTt3avbs2Zo2bZr+/Oc/t2kdIfvJ96bccsstuv7661tcJjU1NfjvwE99nHfeebrggguUkpKinTt3drpvR29rv0tKSpSVlaW0tDQ9+eSTNrfOPm3tt1MlJSUpKiqqUbX0+eefN6qq4By33nqrXnnlFW3ZskUDBw4Md3Ns161bNw0dOlSSNGrUKO3atUtLlizRsmXLWr2OsAZUpP62VFv6feTIEWVlZWnkyJFasWKFunTpVGdlG2jP6+0k3bp108iRI1VYWKhrr702OL2wsFCTJk0KY8tgB8uydOutt2rt2rXatGmThgwZEu4mhYVlWW3eX4c1oForUn9bqqSkRJmZmRo0aJAeeeQRffHFF8F5/fr1C2PL7FdcXKyKigoVFxfL5/Np9+7dkqShQ4fqnHPOCW/jOsC8efM0depUjRo1KlgZFxcXO/764ldffaX9+/cHHx84cEC7d+9WQkKCBg0aFMaW2WfOnDkqKCjQunXr1KNHj2DlHB8fr5iYmDC3zh7z58/XhAkTlJKSouPHj+u5557Tpk2b9Nprr7VtRR0+ltAGe/bssbKysqyEhATL4/FYqamp1qxZs6zDhw+Hu2m2WrFihSWpyZvTTZs2rcl+FxUVhbtpHebxxx+3Bg8ebHXr1s36wQ9+EBHDjouKipp8XadNmxbuptmmub/hFStWhLtptrnxxhuD7+3evXtbV111lfXGG2+0eT38HhQAwEid94IGAMDRCCgAgJEIKACAkQgoAICRCCgAgJEIKACAkQgoAICRCCgAgJEIKACAkQgoAICRCCgAgJH+H2mJFUp/Y6qkAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from matplotlib.animation import FuncAnimation\n", "from IPython.display import HTML\n", "\n", "# 生成初始网格\n", "size = 5\n", "X, Y = np.mgrid[0:size, 0:size].astype(np.float64)\n", "center = size / 2\n", "X += 0.5 - center\n", "Y += 0.5 - center\n", "\n", "# 旋转函数\n", "def rot(X, Y, beta, clockWise=False):\n", " if clockWise:\n", " beta = -beta\n", " X_new = np.cos(beta) * X - np.sin(beta) * Y\n", " Y_new = np.sin(beta) * X + np.cos(beta) * Y\n", " return X_new, Y_new\n", "\n", "# 初始化画布\n", "fig, ax = plt.subplots()\n", "scatter = ax.scatter([], [], c='red', marker='o')\n", "ax.invert_yaxis()\n", "ax.set_title(\"Rotating Grid Points\")\n", "ax.set_xlim(-3, 3)\n", "ax.set_ylim(-3, 3)\n", "ax.grid(True)\n", "ax.set_aspect('equal')\n", "\n", "# 动画更新函数\n", "def update(frame):\n", " angle = frame * (np.pi / 2) / 50 # 从 0 到 90°,分 50 帧\n", " X_rot, Y_rot = rot(X, Y, angle)\n", " scatter.set_offsets(np.c_[X_rot.ravel(), Y_rot.ravel()])\n", " return scatter,\n", "\n", "# 创建动画 ❓\n", "ani = FuncAnimation(fig, update, frames=50, interval=50, blit=True)\n", "\n", "# 显示动画为 HTML\n", "HTML(ani.to_jshtml())" ] }, { "cell_type": "code", "execution_count": null, "id": "283e156f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "beafe9dc-3967-4850-9eee-a8ff06b4b89b", "metadata": {}, "source": [ "## 2.12 np.linalg 线性代数" ] }, { "cell_type": "markdown", "id": "0daf5c08-e184-4896-807c-88bc222b4a26", "metadata": {}, "source": [ "### 2.12.1 @" ] }, { "cell_type": "code", "execution_count": 11, "id": "82eae39d-b17b-4533-908d-e3fb2e66e059", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[19 22]\n", " [43 50]]\n" ] } ], "source": [ "import numpy as np\n", "\n", "A = np.array([[1, 2], [3, 4]])\n", "B = np.array([[5, 6], [7, 8]])\n", "\n", "C = A @ B # 矩阵乘法\n", "print(C)" ] }, { "cell_type": "markdown", "id": "e5f096e8-c2f4-4036-8c2f-1bcee8161915", "metadata": {}, "source": [ "### 2.12.2 decompositions" ] }, { "cell_type": "code", "execution_count": 3, "id": "685b38ba-5cce-4531-9153-4b342bd9651b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVDResult(U=array([[-0.45996176, 0.84045837, -0.28646975],\n", " [-0.86138526, -0.50065539, -0.08578823],\n", " [-0.21552406, 0.20730151, 0.95424078]]), S=array([3.45699448, 1.54054236, 0.55365264]), Vh=array([[-0.85231143, -0.50914829, 0.11972159],\n", " [ 0.36198424, -0.40898848, 0.83767287],\n", " [ 0.37753496, -0.75729548, -0.53288921]]))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.random.randn(3, 3)\n", "np.linalg.svd(A)" ] }, { "cell_type": "code", "execution_count": 4, "id": "bb92f89c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 秩\n", "np.linalg.matrix_rank(A)" ] }, { "cell_type": "markdown", "id": "055190f5-ce66-4c23-8537-7c2682bd7008", "metadata": {}, "source": [ "### 2.12.3 eigen" ] }, { "cell_type": "code", "execution_count": 34, "id": "ef3a9f7b-e282-438b-8c80-2ae0fdb5fe63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "EigResult(eigenvalues=array([ 9.62347538e+00, -6.23475383e-01, 6.75139028e-17]), eigenvectors=array([[-0.38508979, -0.82767094, 0.40824829],\n", " [-0.55951021, -0.14241368, -0.81649658],\n", " [-0.73393063, 0.54284358, 0.40824829]]))" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([\n", " [1, 2, 3],\n", " [2, 3, 4],\n", " [3, 4, 5]\n", "])\n", "np.linalg.eig(A)" ] }, { "cell_type": "code", "execution_count": 36, "id": "64e675d7-9cd7-4437-9a4b-f553c7ab95b3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "EighResult(eigenvalues=array([-2.60555128, 1. , 4.60555128]), eigenvectors=array([[-0.70710678, 0. , -0.70710678],\n", " [ 0.39223227, -0.83205029, -0.39223227],\n", " [ 0.58834841, 0.5547002 , -0.58834841]]))" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([\n", " [1, 2, 3],\n", " [2, 1, 0],\n", " [3, 0, 1]\n", "])\n", "np.linalg.eigh(A) # 对称矩阵的特征值/向量计算,比eig更快" ] }, { "cell_type": "markdown", "id": "91dac588-4019-4351-beba-713e8d22cdae", "metadata": {}, "source": [ "### 2.12.4 numbers" ] }, { "cell_type": "code", "execution_count": 41, "id": "597132c7-9e12-4ebd-95c9-aa9c2e402bb2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "L1: 6.0\n", "L2: 4.605551275463989\n", "INF: 6.0\n" ] } ], "source": [ "A = np.array([\n", " [1, 2, 3],\n", " [2, 1, 0],\n", " [3, 0, 1]\n", "])\n", "# 矩阵范数\n", "print('L1: ', np.linalg.norm(A, ord=1))\n", "print('L2: ', np.linalg.norm(A, ord=2))\n", "print('INF: ', np.linalg.norm(A, ord=np.inf))" ] }, { "cell_type": "code", "execution_count": 19, "id": "eeb9f6ed-ad54-4dae-86e0-1220acefea65", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(1.0)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.eye(3)\n", "np.linalg.det(A)" ] }, { "cell_type": "code", "execution_count": 20, "id": "8497587f-2113-4d19-a9fa-05448c36ccf6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(3.0)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.trace(A)" ] }, { "cell_type": "markdown", "id": "4ef15029-07e4-451a-88a8-6cd21bc747ef", "metadata": {}, "source": [ "### 2.12.5 operations" ] }, { "cell_type": "code", "execution_count": 28, "id": "15e57911-d1f7-4f40-8a88-301c50f9d61f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.35107989e+16, -2.70215978e+16, 1.35107989e+16],\n", " [-2.70215978e+16, 5.40431955e+16, -2.70215978e+16],\n", " [ 1.35107989e+16, -2.70215978e+16, 1.35107989e+16]])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([\n", " [1, 2, 3],\n", " [2, 3, 4],\n", " [3, 4, 5]\n", "])\n", "np.linalg.inv(A)" ] }, { "cell_type": "code", "execution_count": 31, "id": "930792ed-e236-48f7-bf79-fb549a9efd17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 1, 1, 1],\n", " [ 1, 2, 4, 8],\n", " [ 1, 3, 9, 27]])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.vander([1, 2, 3], 3 + 1, increasing=True) # Vandermonde" ] }, { "cell_type": "markdown", "id": "918de248-4b75-41b9-aaa8-b3bd3882c7a8", "metadata": {}, "source": [ "### 2.12.6 diagnoal" ] }, { "cell_type": "code", "execution_count": 32, "id": "5570b0d1-3a36-4413-b266-2eeba3626f01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 3, 5])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diagonal(A)" ] }, { "cell_type": "markdown", "id": "c32969b9-be25-4c2b-b425-05baea23da55", "metadata": {}, "source": [ "### 2.12.7 err" ] }, { "cell_type": "code", "execution_count": 33, "id": "65b1260c-ed8c-4cb4-be5f-2c6a06f46596", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.linalg.LinAlgError" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.LinAlgError" ] }, { "cell_type": "markdown", "id": "24415fff-f1a8-4168-b8ba-d8827356cc4b", "metadata": {}, "source": [ "## 2.13 角度相关" ] }, { "cell_type": "code", "execution_count": 1, "id": "4b386c25-12c4-4ef7-bb05-fe87b5bc6cb2", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 14, "id": "a7bc6459-3a62-4e87-bebb-49c9b2775c02", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(1.1071487177940904)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arctan(2) # (1,2)向量夹角" ] }, { "cell_type": "code", "execution_count": 12, "id": "fc20f5d9-02f3-4930-95c8-053df27cefd2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.7853981633974483)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arctan2(1, 1) # (1,1)向量夹角" ] }, { "cell_type": "code", "execution_count": 9, "id": "9a32be4f-3775-449e-b133-0d12ce03afe4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(45.0)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.degrees(np.arctan2(1, 1)) # 弧度转角度" ] }, { "cell_type": "code", "execution_count": 15, "id": "8d28429c-2d0b-4c3a-ab26-26e6888532ce", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.7853981633974483)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.radians(45) # 角度转弧度" ] }, { "cell_type": "code", "execution_count": 17, "id": "644bf8c0-8fe4-4b60-868b-2421ba7509da", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(1.4142135623730951)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.hypot(1,1) # 向量模长" ] }, { "cell_type": "markdown", "id": "479adf57", "metadata": {}, "source": [ "## emath\n", "复数" ] }, { "cell_type": "code", "execution_count": 55, "id": "05e47416", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1j" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.emath.sqrt(-1)" ] }, { "cell_type": "markdown", "id": "05bc80a9", "metadata": {}, "source": [ "## datime64" ] }, { "cell_type": "code", "execution_count": 56, "id": "16a06dd9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.datetime64('2005-02-25')" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.datetime64('2005-02-25')" ] }, { "cell_type": "code", "execution_count": null, "id": "bf75248b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0f0b9610", "metadata": {}, "source": [ "## exercises\n", "\n", "This is a collection of exercises that have been collected in the numpy mailing list, on stack overflow\n", "and in the numpy documentation. The goal of this collection is to offer a quick reference for both old\n", "and new users but also to provide a set of exercises for those who teach.\n", "\n", "\n", "If you find an error or think you've a better way to solve some of them, feel\n", "free to open an issue at ." ] }, { "cell_type": "markdown", "id": "c365f0cd", "metadata": {}, "source": [ "File automatically generated. See the documentation to update questions/answers/hints programmatically." ] }, { "cell_type": "markdown", "id": "05656140", "metadata": {}, "source": [ "Run the `initialise.py` module, then for each question you can query the\n", "answer or an hint with `hint(n)` or `answer(n)` for `n` question number." ] }, { "cell_type": "code", "execution_count": null, "id": "ac42f131", "metadata": {}, "outputs": [], "source": [ "%run initialise.py" ] }, { "cell_type": "markdown", "id": "db7d89b2", "metadata": {}, "source": [ "#### 2. Print the numpy version and the configuration (★☆☆)" ] }, { "cell_type": "code", "execution_count": 7, "id": "07ce4426", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Build Dependencies:\n", " blas:\n", " detection method: pkgconfig\n", " found: true\n", " include directory: C:/Users/63517/miniconda3/envs/data-analysis/Library/include\n", " lib directory: C:/Users/63517/miniconda3/envs/data-analysis/Library/lib\n", " name: blas\n", " openblas configuration: unknown\n", " pc file directory: D:\\bld\\numpy_1707225570061\\_h_env\\Library\\lib\\pkgconfig\n", " version: 3.9.0\n", " lapack:\n", " detection method: internal\n", " found: true\n", " include directory: unknown\n", " lib directory: unknown\n", " name: dep2598594164480\n", " openblas configuration: unknown\n", " pc file directory: unknown\n", " version: 1.26.4\n", "Compilers:\n", " c:\n", " commands: cl.exe\n", " linker: link\n", " name: msvc\n", " version: 19.29.30153\n", " c++:\n", " commands: cl.exe\n", " linker: link\n", " name: msvc\n", " version: 19.29.30153\n", " cython:\n", " commands: cython\n", " linker: cython\n", " name: cython\n", " version: 3.0.8\n", "Machine Information:\n", " build:\n", " cpu: x86_64\n", " endian: little\n", " family: x86_64\n", " system: windows\n", " host:\n", " cpu: x86_64\n", " endian: little\n", " family: x86_64\n", " system: windows\n", "Python Information:\n", " path: D:\\bld\\numpy_1707225570061\\_h_env\\python.exe\n", " version: '3.10'\n", "SIMD Extensions:\n", " baseline:\n", " - SSE\n", " - SSE2\n", " - SSE3\n", " found:\n", " - SSSE3\n", " - SSE41\n", " - POPCNT\n", " - SSE42\n", " - AVX\n", " - F16C\n", " - FMA3\n", " - AVX2\n", " not found:\n", " - AVX512F\n", " - AVX512CD\n", " - AVX512_SKX\n", " - AVX512_CLX\n", " - AVX512_CNL\n", " - AVX512_ICL\n", "\n" ] } ], "source": [ "np.show_config()" ] }, { "cell_type": "markdown", "id": "536fca68", "metadata": {}, "source": [ "#### 4. How to find the memory size of any array (★☆☆)" ] }, { "cell_type": "code", "execution_count": 9, "id": "23f6b30b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "80" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.zeros(10)\n", "arr.nbytes" ] }, { "cell_type": "markdown", "id": "52f4e73b", "metadata": {}, "source": [ "#### 8. Reverse a vector (first element becomes last) (★☆☆)" ] }, { "cell_type": "code", "execution_count": 13, "id": "2afc7857", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,\n", " 12, 11, 10])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(10, 30)\n", "arr[::-1]" ] }, { "cell_type": "markdown", "id": "c5779e3c", "metadata": {}, "source": [ "#### 9. Create a 3x3 matrix with values ranging from 0 to 8 (★☆☆)" ] }, { "cell_type": "code", "execution_count": 15, "id": "a997b50c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [3, 4, 5],\n", " [6, 7, 8]])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(9).reshape(3,3)" ] }, { "cell_type": "markdown", "id": "30e20773", "metadata": {}, "source": [ "#### 10. Find indices of non-zero elements from [1,2,0,0,4,0] (★☆☆)" ] }, { "cell_type": "code", "execution_count": 19, "id": "467c01f9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0, 1, 4], dtype=int64),)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = [1,2,0,0,4,0]\n", "np.nonzero(arr)" ] }, { "cell_type": "markdown", "id": "8401899d", "metadata": {}, "source": [ "#### 15. Create a 2d array with 1 on the border and 0 inside (★☆☆)" ] }, { "cell_type": "code", "execution_count": 26, "id": "abbe6387", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[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.]])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.ones((10, 10))\n", "arr[1:-1, 1:-1] = 0\n", "arr" ] }, { "cell_type": "markdown", "id": "0936970a", "metadata": {}, "source": [ "#### 16. How to add a border (filled with 0's) around an existing array? (★☆☆)" ] }, { "cell_type": "code", "execution_count": 29, "id": "5584b7b6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0.],\n", " [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.ones((10, 10))\n", "arr = np.pad(arr, pad_width=1)\n", "arr" ] }, { "cell_type": "markdown", "id": "6de2c520", "metadata": {}, "source": [ "#### 17. What is the result of the following expression? (★☆☆)\n", "```python\n", "0 * np.nan\n", "np.nan == np.nan\n", "np.inf > np.nan\n", "np.nan - np.nan\n", "np.nan in set([np.nan])\n", "0.3 == 3 * 0.1\n", "```" ] }, { "cell_type": "code", "execution_count": 33, "id": "8ffbd442", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0.3 == 3 * 0.1" ] }, { "cell_type": "markdown", "id": "7078b4c0", "metadata": {}, "source": [ "```{warning}\n", "python浮点数表示和存储是不一致的。 所以浮点数一定用numpy" ] }, { "cell_type": "code", "execution_count": 34, "id": "bba8a2b7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.30000000000000004" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3*0.1" ] }, { "cell_type": "markdown", "id": "48cec697", "metadata": {}, "source": [ "#### 18. Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆)" ] }, { "cell_type": "code", "execution_count": 39, "id": "b703a5c6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0, 0],\n", " [0, 2, 0, 0],\n", " [0, 0, 3, 0],\n", " [0, 0, 0, 4]])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag(1+np.arange(4))" ] }, { "cell_type": "markdown", "id": "4d0d6493", "metadata": {}, "source": [ "#### 19. Create a 8x8 matrix and fill it with a checkerboard pattern (★☆☆)" ] }, { "cell_type": "code", "execution_count": 44, "id": "a3136fd0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.],\n", " [0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.],\n", " [0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.],\n", " [0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.zeros((8,8))\n", "arr[1::2, ::2] = 1\n", "arr[::2, 1::2] = 1\n", "arr" ] }, { "cell_type": "markdown", "id": "5d005b6d", "metadata": {}, "source": [ "#### 20. Consider a (6,7,8) shape array, what is the index (x,y,z) of the 100th element? (★☆☆)" ] }, { "cell_type": "code", "execution_count": 12, "id": "de94e728", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 5, 3)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "shape = (6,7,8)\n", "np.unravel_index(99, shape)" ] }, { "cell_type": "markdown", "id": "2acac893", "metadata": {}, "source": [ "`unravel_index` 计算多维数组 线性索引对应坐标" ] }, { "cell_type": "markdown", "id": "984451cd", "metadata": {}, "source": [ "#### 21. Create a checkerboard 8x8 matrix using the tile function (★☆☆)" ] }, { "cell_type": "code", "execution_count": 14, "id": "bcc1b3d5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 0, 1, 0, 1, 0, 1],\n", " [1, 0, 1, 0, 1, 0, 1, 0],\n", " [0, 1, 0, 1, 0, 1, 0, 1],\n", " [1, 0, 1, 0, 1, 0, 1, 0],\n", " [0, 1, 0, 1, 0, 1, 0, 1],\n", " [1, 0, 1, 0, 1, 0, 1, 0],\n", " [0, 1, 0, 1, 0, 1, 0, 1],\n", " [1, 0, 1, 0, 1, 0, 1, 0]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = [[0,1],[1,0]]\n", "np.tile(arr, [4, 4])" ] }, { "cell_type": "markdown", "id": "1f88c55e", "metadata": {}, "source": [ "#### 22. Normalize a 5x5 random matrix (★☆☆)" ] }, { "cell_type": "code", "execution_count": 18, "id": "e25676b1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.40015721, 0.97873798, 2.2408932 , 1.86755799, -0.97727788],\n", " [ 0.95008842, -0.15135721, -0.10321885, 0.4105985 , 0.14404357],\n", " [ 1.45427351, 0.76103773, 0.12167502, 0.44386323, 0.33367433],\n", " [ 1.49407907, -0.20515826, 0.3130677 , -0.85409574, -2.55298982],\n", " [ 0.6536186 , 0.8644362 , -0.74216502, 2.26975462, -1.45436567]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.normal(size=(5,5))" ] }, { "cell_type": "markdown", "id": "2091f06d", "metadata": {}, "source": [ "#### 23. Create a custom dtype that describes a color as four unsigned bytes (RGBA) (★☆☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "c2cec00e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype([('R', 'u1'), ('g', 'u1'), ('b', 'u1'), ('a', 'u1')])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dtype([\n", " ('g', np.ubyte),\n", " ('g', np.ubyte),\n", " ('b', np.ubyte),\n", " ('a', np.ubyte),\n", "])" ] }, { "cell_type": "markdown", "id": "9c02a0a0", "metadata": {}, "source": [ "#### 24. Multiply a 5x3 matrix by a 3x2 matrix (real matrix product) (★☆☆)" ] }, { "cell_type": "code", "execution_count": 34, "id": "ae83eb1d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.32395007, -0.51198854],\n", " [ 1.08643489, 0.45519865],\n", " [ 1.21850698, 0.89708761],\n", " [ 0.0385115 , -0.22753733],\n", " [-0.348692 , -0.50089328]])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.randn(5,3) @ np.random.randn(3, 2)" ] }, { "cell_type": "markdown", "id": "9f2f8765", "metadata": {}, "source": [ "#### 25. Given a 1D array, negate all elements which are between 3 and 8, in place. (★☆☆)" ] }, { "cell_type": "code", "execution_count": 38, "id": "d6451a2d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, -1, -1, -1, -1, 8, 9, 10])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = np.arange(11)\n", "z[(z>3) & (z<8)] = -1\n", "z" ] }, { "cell_type": "markdown", "id": "abe97e3c", "metadata": {}, "source": [ "#### 26. What is the output of the following script? (★☆☆)\n", "```python\n", "# Author: Jake VanderPlas\n", "\n", "print(sum(range(5),-1))\n", "from numpy import *\n", "print(sum(range(5),-1))\n", "```" ] }, { "cell_type": "code", "execution_count": 39, "id": "bd265bf9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "10\n" ] } ], "source": [ "print(sum(range(5),-1))\n", "from numpy import *\n", "print(sum(range(5),-1))" ] }, { "cell_type": "markdown", "id": "c81bafee", "metadata": {}, "source": [ "#### 27. Consider an integer vector Z, which of these expressions are legal? (★☆☆)\n", "```python\n", "Z**Z\n", "2 << Z >> 2\n", "Z <- Z\n", "1j*Z\n", "Z/1/1\n", "ZZ\n", "```" ] }, { "cell_type": "code", "execution_count": 41, "id": "c437553c", "metadata": {}, "outputs": [], "source": [ "arr = np.arange(5)\n" ] }, { "cell_type": "markdown", "id": "14b24628", "metadata": {}, "source": [ "#### 28. What are the result of the following expressions? (★☆☆)\n", "```python\n", "np.array(0) / np.array(0)\n", "np.array(0) // np.array(0)\n", "np.array([np.nan]).astype(int).astype(float)\n", "```" ] }, { "cell_type": "code", "execution_count": 43, "id": "5fd76117", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\63517\\AppData\\Local\\Temp\\ipykernel_19948\\699728972.py:1: RuntimeWarning: invalid value encountered in cast\n", " np.array([np.nan]).astype(int).astype(float)\n" ] }, { "data": { "text/plain": [ "array([-2.14748365e+09])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([np.nan]).astype(int).astype(float)" ] }, { "cell_type": "markdown", "id": "7d8518a2", "metadata": {}, "source": [ "#### 29. How to round away from zero a float array ? (★☆☆)" ] }, { "cell_type": "code", "execution_count": 47, "id": "fbe24ea9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.05749243, 6.92817345, 3.98958551, -4.05126098, 6.27595639,\n", " -2.06988518, 7.62206394, 1.62545745, 7.63470724, 3.8506318 ])" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = np.random.uniform(-10, 10 ,10)\n", "z" ] }, { "cell_type": "code", "execution_count": 49, "id": "29899233", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-2., 7., 4., -5., 7., -3., 8., 2., 8., 4.])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.where(z>0, np.ceil(z), np.floor(z))" ] }, { "cell_type": "markdown", "id": "7598b9b7", "metadata": {}, "source": [ "#### 30. How to find common values between two arrays? (★☆☆)" ] }, { "cell_type": "code", "execution_count": 51, "id": "70586078", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.intersect1d(np.arange(10), np.arange(3))" ] }, { "cell_type": "markdown", "id": "ebbaaec4", "metadata": {}, "source": [ "#### 32. Is the following expressions true? (★☆☆)\n", "```python\n", "np.sqrt(-1) == np.emath.sqrt(-1)\n", "```" ] }, { "cell_type": "code", "execution_count": 52, "id": "a81a60ab", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\63517\\AppData\\Local\\Temp\\ipykernel_19948\\3438155168.py:1: RuntimeWarning: invalid value encountered in sqrt\n", " np.sqrt(-1)\n" ] }, { "data": { "text/plain": [ "nan" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sqrt(-1)" ] }, { "cell_type": "code", "execution_count": 54, "id": "0c1c063c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1j" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.emath.sqrt(-1)" ] }, { "cell_type": "markdown", "id": "08c3b728", "metadata": {}, "source": [ "#### 33. How to get the dates of yesterday, today and tomorrow? (★☆☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "43840b5a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "08c7041f", "metadata": {}, "source": [ "#### 34. How to get all the dates corresponding to the month of July 2016? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "2d1bad41", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f0431aeb", "metadata": {}, "source": [ "#### 35. How to compute ((A+B)*(-A/2)) in place (without copy)? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "89dd78e1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "00dad6da", "metadata": {}, "source": [ "#### 36. Extract the integer part of a random array of positive numbers using 4 different methods (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "9df015b4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c2c4ee6e", "metadata": {}, "source": [ "#### 37. Create a 5x5 matrix with row values ranging from 0 to 4 (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "2f75f0d2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8a38e20f", "metadata": {}, "source": [ "#### 38. Consider a generator function that generates 10 integers and use it to build an array (★☆☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "19d4cce4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "15755404", "metadata": {}, "source": [ "#### 39. Create a vector of size 10 with values ranging from 0 to 1, both excluded (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "e075f19c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "431dfa37", "metadata": {}, "source": [ "#### 40. Create a random vector of size 10 and sort it (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "78d9f610", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1afb1ca0", "metadata": {}, "source": [ "#### 41. How to sum a small array faster than np.sum? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "3d3b457d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ed6f64fa", "metadata": {}, "source": [ "#### 42. Consider two random arrays A and B, check if they are equal (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "6f8d29c6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6e68d616", "metadata": {}, "source": [ "#### 43. Make an array immutable (read-only) (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "052d7275", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6326a2f5", "metadata": {}, "source": [ "#### 44. Consider a random 10x2 matrix representing cartesian coordinates, convert them to polar coordinates (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "71652e11", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b19b988d", "metadata": {}, "source": [ "#### 45. Create random vector of size 10 and replace the maximum value by 0 (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "2e4f7ecc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5af3b55a", "metadata": {}, "source": [ "#### 46. Create a structured array with `x` and `y` coordinates covering the [0,1]x[0,1] area (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "88b8faf9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "60198167", "metadata": {}, "source": [ "#### 47. Given two arrays, X and Y, construct the Cauchy matrix C (Cij =1/(xi - yj)) (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "46e62c10", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5d926c0d", "metadata": {}, "source": [ "#### 48. Print the minimum and maximum representable values for each numpy scalar type (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "07ab3bf5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "48d54cb5", "metadata": {}, "source": [ "#### 49. How to print all the values of an array? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "9e264eb3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6f2d0c3b", "metadata": {}, "source": [ "#### 50. How to find the closest value (to a given scalar) in a vector? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "854c02a6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "876d0fff", "metadata": {}, "source": [ "#### 51. Create a structured array representing a position (x,y) and a color (r,g,b) (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "f9f2adfa", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "427f6128", "metadata": {}, "source": [ "#### 52. Consider a random vector with shape (100,2) representing coordinates, find point by point distances (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "c1c5cfdd", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c4745e58", "metadata": {}, "source": [ "#### 53. How to convert a float (32 bits) array into an integer (32 bits) array in place?" ] }, { "cell_type": "code", "execution_count": null, "id": "9aff8df1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f58cb864", "metadata": {}, "source": [ "#### 54. How to read the following file? (★★☆)\n", "```\n", "1, 2, 3, 4, 5\n", "6, , , 7, 8\n", " , , 9,10,11\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "74cd2fa9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a44e6621", "metadata": {}, "source": [ "#### 55. What is the equivalent of enumerate for numpy arrays? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "9e017836", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6d837cf3", "metadata": {}, "source": [ "#### 56. Generate a generic 2D Gaussian-like array (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "7b4ffb9c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "165efe21", "metadata": {}, "source": [ "#### 57. How to randomly place p elements in a 2D array? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "62c339ef", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "91d77d48", "metadata": {}, "source": [ "#### 58. Subtract the mean of each row of a matrix (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "f009c9de", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a2bbaae8", "metadata": {}, "source": [ "#### 59. How to sort an array by the nth column? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "bb4d8122", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c9e2fe4b", "metadata": {}, "source": [ "#### 60. How to tell if a given 2D array has null columns? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "57fdda30", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f8f8fadf", "metadata": {}, "source": [ "#### 61. Find the nearest value from a given value in an array (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "42e6ff58", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9a692123", "metadata": {}, "source": [ "#### 62. Considering two arrays with shape (1,3) and (3,1), how to compute their sum using an iterator? (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "f3309fbd", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a1e92aad", "metadata": {}, "source": [ "#### 63. Create an array class that has a name attribute (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "d795807c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1edc41d6", "metadata": {}, "source": [ "#### 64. Consider a given vector, how to add 1 to each element indexed by a second vector (be careful with repeated indices)? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "dee578dd", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "07b131f0", "metadata": {}, "source": [ "#### 65. How to accumulate elements of a vector (X) to an array (F) based on an index list (I)? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "e7119e74", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d52719df", "metadata": {}, "source": [ "#### 66. Considering a (w,h,3) image of (dtype=ubyte), compute the number of unique colors (★★☆)" ] }, { "cell_type": "code", "execution_count": null, "id": "ada922d8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e9a1cdeb", "metadata": {}, "source": [ "#### 67. Considering a four dimensions array, how to get sum over the last two axis at once? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "c8aa1cf7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "833bfe05", "metadata": {}, "source": [ "#### 68. Considering a one-dimensional vector D, how to compute means of subsets of D using a vector S of same size describing subset indices? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "daa7fe06", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c1f16d41", "metadata": {}, "source": [ "#### 69. How to get the diagonal of a dot product? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "ceda352c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3b28c1d3", "metadata": {}, "source": [ "#### 70. Consider the vector [1, 2, 3, 4, 5], how to build a new vector with 3 consecutive zeros interleaved between each value? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "c3f11084", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "eb1162b8", "metadata": {}, "source": [ "#### 71. Consider an array of dimension (5,5,3), how to multiply it by an array with dimensions (5,5)? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "74d8ef0f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ffe8f7ec", "metadata": {}, "source": [ "#### 72. How to swap two rows of an array? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "cdf1c5e5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f3e9bc04", "metadata": {}, "source": [ "#### 73. Consider a set of 10 triplets describing 10 triangles (with shared vertices), find the set of unique line segments composing all the triangles (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "53840bd2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2b1d2081", "metadata": {}, "source": [ "#### 74. Given a sorted array C that corresponds to a bincount, how to produce an array A such that np.bincount(A) == C? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "c00b31fc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a8779334", "metadata": {}, "source": [ "#### 75. How to compute averages using a sliding window over an array? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "a0c1d784", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "2a749294", "metadata": {}, "source": [ "#### 76. Consider a one-dimensional array Z, build a two-dimensional array whose first row is (Z[0],Z[1],Z[2]) and each subsequent row is shifted by 1 (last row should be (Z[-3],Z[-2],Z[-1]) (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "df524f10", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "de9cd1f7", "metadata": {}, "source": [ "#### 77. How to negate a boolean, or to change the sign of a float inplace? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "6b1a1c02", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7854f0a9", "metadata": {}, "source": [ "#### 78. Consider 2 sets of points P0,P1 describing lines (2d) and a point p, how to compute distance from p to each line i (P0[i],P1[i])? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "5eaccf87", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "344ef698", "metadata": {}, "source": [ "#### 79. Consider 2 sets of points P0,P1 describing lines (2d) and a set of points P, how to compute distance from each point j (P[j]) to each line i (P0[i],P1[i])? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "4c4467b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "15696d36", "metadata": {}, "source": [ "#### 80. Consider an arbitrary array, write a function that extracts a subpart with a fixed shape and centered on a given element (pad with a `fill` value when necessary) (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "cb5f47e2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c6490503", "metadata": {}, "source": [ "#### 81. Consider an array Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14], how to generate an array R = [[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "b015a66b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ba48025f", "metadata": {}, "source": [ "#### 82. Compute a matrix rank (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "eed1e965", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9231adee", "metadata": {}, "source": [ "#### 83. How to find the most frequent value in an array?" ] }, { "cell_type": "code", "execution_count": null, "id": "9caf017b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "809a1b04", "metadata": {}, "source": [ "#### 84. Extract all the contiguous 3x3 blocks from a random 10x10 matrix (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "b2d2c533", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "03fd7136", "metadata": {}, "source": [ "#### 85. Create a 2D array subclass such that Z[i,j] == Z[j,i] (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "a4849344", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0f309659", "metadata": {}, "source": [ "#### 86. Consider a set of p matrices with shape (n,n) and a set of p vectors with shape (n,1). How to compute the sum of of the p matrix products at once? (result has shape (n,1)) (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "e1544d58", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a8230594", "metadata": {}, "source": [ "#### 87. Consider a 16x16 array, how to get the block-sum (block size is 4x4)? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "c92f3c33", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b63e6d19", "metadata": {}, "source": [ "#### 88. How to implement the Game of Life using numpy arrays? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "0250e0ed", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ff88eb9c", "metadata": {}, "source": [ "#### 89. How to get the n largest values of an array (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "65b174d7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b4e4b8e8", "metadata": {}, "source": [ "#### 90. Given an arbitrary number of vectors, build the cartesian product (every combination of every item) (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "acf339ed", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "42828e29", "metadata": {}, "source": [ "#### 91. How to create a record array from a regular array? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "ce6380ba", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0c7170e9", "metadata": {}, "source": [ "#### 92. Consider a large vector Z, compute Z to the power of 3 using 3 different methods (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "c4b6ef43", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4f46bc6d", "metadata": {}, "source": [ "#### 93. Consider two arrays A and B of shape (8,3) and (2,2). How to find rows of A that contain elements of each row of B regardless of the order of the elements in B? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "b03f36b5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "8c2a22d9", "metadata": {}, "source": [ "#### 94. Considering a 10x3 matrix, extract rows with unequal values (e.g. [2,2,3]) (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "d2ee95a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "dc973859", "metadata": {}, "source": [ "#### 95. Convert a vector of ints into a matrix binary representation (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "b95f9c72", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0f9c7b5a", "metadata": {}, "source": [ "#### 96. Given a two dimensional array, how to extract unique rows? (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "129fa0d8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "87f931c9", "metadata": {}, "source": [ "#### 97. Considering 2 vectors A & B, write the einsum equivalent of inner, outer, sum, and mul function (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "8bc1c7c3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "386d3550", "metadata": {}, "source": [ "#### 98. Considering a path described by two vectors (X,Y), how to sample it using equidistant samples (★★★)?" ] }, { "cell_type": "code", "execution_count": null, "id": "8780018a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9c3d19e5", "metadata": {}, "source": [ "#### 99. Given an integer n and a 2D array X, select from X the rows which can be interpreted as draws from a multinomial distribution with n degrees, i.e., the rows which only contain integers and which sum to n. (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "0f3df060", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "347047a4", "metadata": {}, "source": [ "#### 100. Compute bootstrapped 95% confidence intervals for the mean of a 1D array X (i.e., resample the elements of an array with replacement N times, compute the mean of each sample, and then compute percentiles over the means). (★★★)" ] }, { "cell_type": "code", "execution_count": null, "id": "bb1d6e12", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "54100ccb-5fad-4e9f-8208-d37d872ffaa1", "metadata": {}, "source": [ "### 1. 计算0的比例" ] }, { "cell_type": "code", "execution_count": 31, "id": "cd2fc963-7f5b-440c-8114-cbfb8f0699e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "np.float64(0.4)" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "a = [1.0, 0, 0.2 ,0.3, 0]\n", "d = np.array(a)\n", "np.mean(d==0)" ] }, { "cell_type": "markdown", "id": "9209f6ca-3f23-4b2a-92f8-9eb2e75b123a", "metadata": {}, "source": [ "### 2. 计算数组标准差时候忽略NaN" ] }, { "cell_type": "code", "execution_count": null, "id": "34d343fe-2348-4e84-af1c-f34325807b6d", "metadata": {}, "outputs": [], "source": [ "a = np.array([1, 1.2, np.nan])\n", "print(np.std(a))\n", "print(np.nanstd(a))\n", "print(a[~np.isnan(a)].std())" ] }, { "cell_type": "markdown", "id": "fc4764d7-a914-4d1d-a9a0-980c06df70c1", "metadata": {}, "source": [ "### 3. 获取二维数组行列数" ] }, { "cell_type": "code", "execution_count": 32, "id": "bf3c4834-6747-4648-a4d6-6c51961d0cbe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n", "(10, 3)\n", "10\n" ] } ], "source": [ "a = np.random.random(size= (10, 3))\n", "print(a.size)\n", "print(a.shape)\n", "print(len(a))\n", "# print(a.dim) # error" ] }, { "cell_type": "markdown", "id": "b76b95b9-9c9b-4817-ab93-7e34abc3ce18", "metadata": {}, "source": [ "### 4. 代码输出" ] }, { "cell_type": "code", "execution_count": 85, "id": "6849eaa3-6a13-4891-a573-e2c1797d5b27", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.0\n" ] } ], "source": [ "print(np.floor(3.7)) # 返回的是float而不是int" ] }, { "cell_type": "code", "execution_count": 83, "id": "fa664b34-a252-458e-88e2-9a4cbd0db60d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.141592653589793\n", "3.141592653589793\n", "3.141592653589793\n" ] } ], "source": [ "print(np.radians(180))\n", "print(np.deg2rad(180))\n", "print(np.angle(-np.pi)) # 返回 -pi, pi 的实数表达" ] }, { "cell_type": "code", "execution_count": 108, "id": "719e6e42-771d-488d-988c-82f2074108bb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.57\n" ] } ], "source": [ "print(np.round(2.567, 2))" ] }, { "cell_type": "code", "execution_count": 143, "id": "69f72379-fd12-402f-9e83-b67e9f86664b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.0\n" ] } ], "source": [ "print(np.log10(100))" ] }, { "cell_type": "code", "execution_count": 145, "id": "3d7ca9c1-07da-4954-918b-a8fd002698fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.0\n" ] } ], "source": [ "print(np.sqrt(np.square(-5)))" ] }, { "cell_type": "code", "execution_count": 153, "id": "385f4d33-b6b7-4560-a5e2-c215893625e3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 1])" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.array([1, 2, 3])\n", "np.diff(a)" ] }, { "cell_type": "code", "execution_count": 154, "id": "1fc44e5c-2059-4795-9890-c67a8b75870c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1.0\n" ] } ], "source": [ "print(np.sign(-3.14))" ] }, { "cell_type": "markdown", "id": "dfef0cda-1fb5-4d25-992e-e699cb7feb09", "metadata": {}, "source": [ "### 5. 数组堆叠" ] }, { "cell_type": "code", "execution_count": 45, "id": "2643ec70-4fe6-4608-955e-8d356751d3f1", "metadata": {}, "outputs": [], "source": [ "a = np.random.random(size = (3, 3))\n", "b = np.random.random(size = a.shape)" ] }, { "cell_type": "code", "execution_count": 54, "id": "91d24d8e-8b8a-4578-9fa5-c9fcdfd6d57e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "垂直堆叠等价!\n", "[[0.0641475 0.69247212 0.56660145]\n", " [0.26538949 0.52324805 0.09394051]\n", " [0.5759465 0.9292962 0.31856895]\n", " [0.66741038 0.13179786 0.7163272 ]\n", " [0.28940609 0.18319136 0.58651293]\n", " [0.02010755 0.82894003 0.00469548]]\n", "[[0.0641475 0.69247212 0.56660145]\n", " [0.26538949 0.52324805 0.09394051]\n", " [0.5759465 0.9292962 0.31856895]\n", " [0.66741038 0.13179786 0.7163272 ]\n", " [0.28940609 0.18319136 0.58651293]\n", " [0.02010755 0.82894003 0.00469548]]\n", "[[0.0641475 0.69247212 0.56660145]\n", " [0.26538949 0.52324805 0.09394051]\n", " [0.5759465 0.9292962 0.31856895]\n", " [0.66741038 0.13179786 0.7163272 ]\n", " [0.28940609 0.18319136 0.58651293]\n", " [0.02010755 0.82894003 0.00469548]]\n", "[[0.0641475 0.69247212 0.56660145]\n", " [0.26538949 0.52324805 0.09394051]\n", " [0.5759465 0.9292962 0.31856895]\n", " [0.66741038 0.13179786 0.7163272 ]\n", " [0.28940609 0.18319136 0.58651293]\n", " [0.02010755 0.82894003 0.00469548]]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_563/1015955732.py:5: DeprecationWarning: `row_stack` alias is deprecated. Use `np.vstack` directly.\n", " print(np.row_stack((a, b)))\n" ] } ], "source": [ "print('垂直堆叠等价!')\n", "print(np.concatenate((a, b)))\n", "print(np.concatenate((a, b), axis = 0))\n", "print(np.vstack((a, b)))\n", "print(np.row_stack((a, b)))" ] }, { "cell_type": "markdown", "id": "0997bfb1-5b34-4681-ac6c-6587e12d0287", "metadata": {}, "source": [ "### 6. 代码功能" ] }, { "cell_type": "code", "execution_count": 62, "id": "a849f579-11b8-47e7-8ee4-9bb41d20f119", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "np.unique 代码功能:去重并且排序 [1 3]\n" ] } ], "source": [ "a = np.array([1, 3, 1])\n", "np.unique(a)\n", "print('np.unique 代码功能:去重并且排序', np.unique(a))" ] }, { "cell_type": "markdown", "id": "d5daac56-ae47-4060-8cc1-e607c8409e90", "metadata": {}, "source": [ "### 7. 向量点积" ] }, { "cell_type": "code", "execution_count": 97, "id": "d961a041-27ef-498f-af99-e4a709f0ec03", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0.25 0.5 0.75 1. ] [0. 0.25 0.5 0.75 1. ]\n", "1.875\n", "1.875\n", "1.875\n" ] } ], "source": [ "a = np.linspace(0, 1, 5)\n", "b = np.linspace(0, 1, 5)\n", "print(a, b)\n", "print(a.dot(b))\n", "print(np.dot(a, b))\n", "print(a@b)" ] }, { "cell_type": "markdown", "id": "99856268-45d4-4c68-9763-dc73c1281583", "metadata": {}, "source": [ "### 8. 随机数" ] }, { "cell_type": "code", "execution_count": 132, "id": "763cfb55-ece8-42c7-856a-f6df21957e98", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "生成5个随机浮点数数组。[0,1]\n", "[0.22431703 0.09784448 0.86219152 0.97291949 0.96083466]\n", "[0.9065555 0.77404733 0.33314515 0.08110139 0.40724117]\n", "[0.23223414 0.13248763 0.05342718 0.72559436 0.01142746]\n" ] } ], "source": [ "print('生成5个随机浮点数数组。[0,1]')\n", "print(np.random.sample(5))\n", "print(np.random.random(5))\n", "print(np.random.rand(5))" ] }, { "cell_type": "code", "execution_count": 134, "id": "de485edd-8cbc-477e-bb09-5c458bbe986d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "生成几个区间内随机数\n", "[-0.01853116058862092, 0.6821578667203938, 1.2294751652956677, 2.442204695315175, 1.908177050845313]\n", "[1, 4, 4, 2, 0]\n" ] } ], "source": [ "print('生成几个区间内随机数')\n", "print([np.random.uniform(-1, 3) for i in range(5)])\n", "print([np.random.randint(5) for _ in range(5)])" ] }, { "cell_type": "markdown", "id": "df0db12d-9858-4e28-af25-94494eddbcfa", "metadata": {}, "source": [ "### 9.数组内计算" ] }, { "cell_type": "code", "execution_count": 126, "id": "6d4314e6-b50a-4066-b3aa-1d42443dca88", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "数组的最大值索引\n", "[0.24082878 0.10029394 0.01642963 0.92952932 0.66991655]\n", "3\n", "3\n" ] } ], "source": [ "print('数组的最大值索引')\n", "a = np.random.rand(5)\n", "print(a)\n", "print(np.argmax(a))\n", "print(a.argmax())" ] }, { "cell_type": "code", "execution_count": 162, "id": "2dec1659-da03-49fc-9292-8fa5c6ca697b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "数组绝对值\n", "[0.794140209206287, -0.7578802407978291, -0.5169086270120735, -0.5434727801992574]\n", "[0.79414021 0.75788024 0.51690863 0.54347278]\n", "[0.79414021 0.75788024 0.51690863 0.54347278]\n" ] } ], "source": [ "print('数组绝对值')\n", "a = [np.random.uniform(-1, 1) for _ in range(4)]\n", "print(a)\n", "print(np.abs(a))\n", "print(np.absolute(a))" ] }, { "cell_type": "code", "execution_count": 168, "id": "7bb9c0c0-a406-4c38-9f7b-5d3fec851cdb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "exp\n", "[1.00789825 0.66530132 2.16392681 0.7435949 ]\n", "[1.00789825 0.66530132 2.16392681 0.7435949 ]\n", "[1.90655714e-06 nan 4.94762469e-01 nan]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_563/2254085650.py:5: RuntimeWarning: invalid value encountered in power\n", " print(np.array(a) ** np.e)\n" ] } ], "source": [ "print('exp')\n", "a = [np.random.uniform(-1, 1) for _ in range(4)]\n", "print(np.exp(a))\n", "print(np.power(np.e, a))" ] }, { "cell_type": "code", "execution_count": 170, "id": "a7c2e2a7-4f8c-4a39-81f9-335ea33861de", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "行列式\n", "[[0.70791746 0.70907211 0.61174841]\n", " [0.67190702 0.44751587 0.69607717]\n", " [0.37832614 0.10003205 0.96025678]]\n", "-0.07830073927928352\n" ] } ], "source": [ "a = np.random.random(size=(3,3))\n", "print('行列式')\n", "print(a)\n", "print(np.linalg.det(a))\n", "#print(np.det(a)) # error!!!" ] }, { "cell_type": "markdown", "id": "27439f7e-3e46-4b0d-aa38-769ffe261625", "metadata": {}, "source": [ "### 10. 数组类型转换" ] }, { "cell_type": "code", "execution_count": 119, "id": "fa967a29-e18c-40b4-b47e-67615dcacec4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "整数数组=>浮点型\n", "[ 1 2 -1]\n", "[ 1. 2. -1.]\n", "[ 1. 2. -1.]\n", "[ 1. 2. -1.]\n" ] } ], "source": [ "print('整数数组=>浮点型')\n", "a = np.array([1, 2, -1])\n", "print(a)\n", "print(a.astype(float))\n", "print(a.astype(np.float64))\n", "print(np.float64(a))" ] }, { "cell_type": "code", "execution_count": 123, "id": "b2c31692-96ed-4e2e-a728-66fa24aeaae0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bool数组=>整型\n", "[ True False]\n", "[1 0]\n", "[1 0]\n", "[1 0]\n" ] } ], "source": [ "print('bool数组=>整型')\n", "a = np.array([True, False])\n", "print(a)\n", "print(a.astype(int))\n", "print(a * 1)\n", "print(np.int_(a))" ] }, { "cell_type": "markdown", "id": "c522b94f-811e-4881-b7c1-7c258032bb2c", "metadata": {}, "source": [ "### 11. 数组的累积" ] }, { "cell_type": "code", "execution_count": 95, "id": "60820c30-431c-4cd6-ac3e-d6c1879a59f1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 6]\n", "[1 2 6]\n" ] } ], "source": [ "a = np.array([1, 2, 3])\n", "print(np.cumprod(a))\n", "print(a.cumprod())" ] }, { "cell_type": "markdown", "id": "7db3ddd2-b5cb-4967-bd56-2a62138c539a", "metadata": {}, "source": [ "### 12. 指定形状矩阵" ] }, { "cell_type": "code", "execution_count": 107, "id": "1ca446bd-1f5c-4839-b08b-337eae65ee54", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 0 0]\n", " [0 2 0]\n", " [0 0 3]]\n", "[[1. 0. 0.]\n", " [0. 1. 0.]\n", " [0. 0. 1.]]\n", "[[1 0 0]\n", " [0 2 0]\n", " [0 0 3]]\n" ] } ], "source": [ "print(np.diag([1, 2, 3]))\n", "print(np.eye(3)) # 单位矩阵\n", "print(np.diagflat([1, 2, 3]))" ] }, { "cell_type": "markdown", "id": "b19caff9-d2e7-41e7-b8b5-12c8975af57a", "metadata": {}, "source": [ "### 13. 矩阵间计算" ] }, { "cell_type": "code", "execution_count": 178, "id": "d56ea5a2-6fbc-4aa5-b97b-0c81f5b2977d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.55217351 3.3946128 2.34842722 1.34907623 1.87644318]\n", "[1.55217351 3.3946128 2.34842722 1.34907623 1.87644318]\n" ] } ], "source": [ "a = [np.random.uniform(1,2) for _ in range(5)]\n", "b = [np.random.uniform(1,2) for _ in range(5)]\n", "a = np.array(a)\n", "b = np.array(b)\n", "print(a * b)\n", "print(np.multiply(a,b))\n" ] }, { "cell_type": "code", "execution_count": null, "id": "eaed4c06-0ed2-4484-bc27-169e04082754", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c3b3ff54-b019-4bff-9039-b0ecafd65d4f", "metadata": {}, "source": [ "### 14. 数组转换" ] }, { "cell_type": "code", "execution_count": 179, "id": "42817679-06b2-42d2-bb3c-9ea89b9d946c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "二维数组展开到一维\n", "[0.97208251 0.83381823 0.91479066 0.66728484 0.44066609 0.68509199\n", " 0.64859831 0.02910001 0.91953144]\n", "[0.97208251 0.83381823 0.91479066 0.66728484 0.44066609 0.68509199\n", " 0.64859831 0.02910001 0.91953144]\n", "[0.97208251 0.83381823 0.91479066 0.66728484 0.44066609 0.68509199\n", " 0.64859831 0.02910001 0.91953144]\n" ] } ], "source": [ "print('二维数组展开到一维')\n", "a = np.random.random(size=(3, 3))\n", "print(a.flatten())\n", "print(a.ravel())\n", "print(a.reshape(-1))" ] }, { "cell_type": "code", "execution_count": null, "id": "74173ea1-ace9-417c-b478-1f75d11d9f8d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e43cd88c-dc71-44b2-802c-8012533a653b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "data-analysis", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.15" } }, "nbformat": 4, "nbformat_minor": 5 }