diff --git "a/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.ipynb" "b/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.ipynb" index fa372ea321d4c4420deac6d860e30c3f357e0db0..d47f53f7bb630c2933181fedc03e770b6888ce6f 100644 --- "a/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.ipynb" +++ "b/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.ipynb" @@ -1,5 +1,59 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. 花式索引" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr3的值为:\n", + " [[40 32 93 99 1]\n", + " [94 68 23 64 38]\n", + " [43 37 46 5 70]\n", + " [87 16 73 88 37]\n", + " [55 35 0 98 49]\n", + " [51 44 56 25 55]\n", + " [66 36 29 22 57]]\n", + "arr3的花式索引:\n", + " [[40 32 93 99 1]\n", + " [43 37 46 5 70]\n", + " [51 44 56 25 55]]\n", + "使用负索引取arr3:\n", + " [[66 36 29 22 57]\n", + " [51 44 56 25 55]]\n", + "使用多个元组花式索引:\n", + " [93 88 55]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "arr3 = np.random.randint(100, size=(7, 5))\n", + "print(\"arr3的值为:\\n\", arr3)\n", + "print(\"arr3的花式索引:\\n\", arr3[[0, 2, 5]])\n", + "\n", + "print(\"使用负索引取arr3:\\n\", arr3[[-1, -2]])\n", + "\n", + "print(\"使用多个元组花式索引:\\n\", arr3[[0, 3, 5], [2, 3, 4]])\n", + "\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -10,24 +64,24 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[0.91824799 0.10933913 0.11662563 0.31654472]\n", - " [0.80562253 0.16738325 0.3263081 0.08866701]\n", - " [0.80118086 0.6241572 0.54201974 0.92445629]]\n", + "[[0.50254809 0.18256208 0.88834996 0.5050639 ]\n", + " [0.3143366 0.09932439 0.03916006 0.36224856]\n", + " [0.72655067 0.86527996 0.72737793 0.93175135]]\n", "bool索引为\n", - " [[False True True True]\n", - " [False True True True]\n", + " [[False True False False]\n", + " [ True True True True]\n", " [False False False False]]\n", "清除小于0.5的数,结果为\n", - " [[0.91824799 0. 0. 0. ]\n", - " [0.80562253 0. 0. 0. ]\n", - " [0.80118086 0.6241572 0.54201974 0.92445629]]\n" + " [[0.50254809 0. 0.88834996 0.5050639 ]\n", + " [0. 0. 0. 0. ]\n", + " [0.72655067 0.86527996 0.72737793 0.93175135]]\n" ] } ], @@ -57,32 +111,32 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[20 54 87 11 41]\n", - " [58 10 63 27 26]\n", - " [49 66 92 22 15]\n", - " [41 8 83 72 76]]\n", + "[[33 18 94 17 31]\n", + " [95 78 96 90 53]\n", + " [57 20 92 51 23]\n", + " [44 83 21 38 65]]\n", "使用布尔索引获取第2行和第4行\n", - " [[58 10 63 27 26]\n", - " [41 8 83 72 76]]\n", + " [[95 78 96 90 53]\n", + " [44 83 21 38 65]]\n", "使用花式索引获取第2行和第4行\n", - " [[58 10 63 27 26]\n", - " [41 8 83 72 76]]\n", + " [[95 78 96 90 53]\n", + " [44 83 21 38 65]]\n", "花式索引获取(0,0)(1,4)(3,4)位置\n", - " [20 26 76]\n", - "列的花式索引 [[54 11]\n", - " [10 27]\n", - " [66 22]\n", - " [ 8 72]]\n", + " [33 53 65]\n", + "列的花式索引 [[18 17]\n", + " [78 90]\n", + " [20 51]\n", + " [83 38]]\n", "正常索引\n", - " [[58 10 63 27 26]\n", - " [41 8 83 72 76]]\n" + " [[95 78 96 90 53]\n", + " [44 83 21 38 65]]\n" ] } ], @@ -115,7 +169,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.11.5" } }, "nbformat": 4, diff --git "a/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.md" "b/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.md" index b342bb00b241bf91f02c928e2020677c400d4219..90b61fa12c7ef76891052423ed8a4d46565c5f86 100644 --- "a/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.md" +++ "b/Numpy/4-Numpy\345\270\203\345\260\224\347\264\242\345\274\225\345\222\214\350\212\261\345\274\217\347\264\242\345\274\225.md" @@ -73,7 +73,7 @@ [41, 1, 10, 56, 99]]) """ - #多个索引数组 + #多个索引元组 arr3[(0,3,5),(2,3,4)] #取出(0,2),(3,3),(5,4)元素 """ array([51, 54, 25]) diff --git "a/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.ipynb" "b/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.ipynb" index 19a7ab63b4fd357120e87ad2583e83aafd85f7f1..fd87089346982c50f718d0f8a98625253c4c51a4 100644 --- "a/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.ipynb" +++ "b/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.ipynb" @@ -1,5 +1,85 @@ { "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr1的值为:\n", + " [[0.97974888 0.38731184 0.21962602 0.10827049]\n", + " [0.97100491 0.24536715 0.3831528 0.40753956]\n", + " [0.5696705 0.05421515 0.50740575 0.17071737]]\n", + "np.reshape的结果:\n", + " [[0.97974888 0.24536715 0.50740575]\n", + " [0.97100491 0.05421515 0.10827049]\n", + " [0.5696705 0.21962602 0.40753956]\n", + " [0.38731184 0.3831528 0.17071737]]\n", + "arr1的值为:\n", + " [[0.97974888 0.38731184 0.21962602 0.10827049]\n", + " [0.97100491 0.24536715 0.3831528 0.40753956]\n", + " [0.5696705 0.05421515 0.50740575 0.17071737]]\n", + "arr1内置reshape的结果:\n", + " [[0.97974888 0.38731184 0.21962602]\n", + " [0.10827049 0.97100491 0.24536715]\n", + " [0.3831528 0.40753956 0.5696705 ]\n", + " [0.05421515 0.50740575 0.17071737]]\n", + "arr1的尺寸推断\n", + " [[0.97974888 0.38731184 0.21962602]\n", + " [0.10827049 0.97100491 0.24536715]\n", + " [0.3831528 0.40753956 0.5696705 ]\n", + " [0.05421515 0.50740575 0.17071737]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr1 = np.random.rand(3, 4)\n", + "print(\"arr1的值为:\\n\", arr1)\n", + "print(\"np.reshape的结果:\\n\", np.reshape(arr1, newshape=(4, 3), order='F'))\n", + "print(\"arr1的值为:\\n\", arr1)\n", + "print(\"arr1内置reshape的结果:\\n\", arr1.reshape(4, 3))\n", + "print(\"arr1的尺寸推断\\n\", arr1.reshape(4, -1))\n", + "# print(\"使用不恰当的尺寸:\\n\", arr1.reshape(3, 5))?" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a的数值为:\n", + " [[0 1]\n", + " [2 3]]\n", + "adarry.resize的结果:\n", + " [[0 1]\n", + " [2 3]]\n", + "np.resize的结果:\n", + " [[0]\n", + " [1]]\n", + "a的数值为:\n", + " [[0 1]\n", + " [2 3]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "a = np.array([[0, 1], [2, 3]])\n", + "print(\"a的数值为:\\n\", a)\n", + "# a.resize(2, 1)\n", + "print(\"adarry.resize的结果:\\n\", a) # 可以忽略size的匹配 直接改变a 返回值为None\n", + "print(\"np.resize的结果:\\n\", np.resize(a, new_shape=(2, 1))) # 可以忽略size的匹配 不改变a 返回值是变换的结果\n", + "print(\"a的数值为:\\n\", a)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -243,7 +323,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.8.5" } }, "nbformat": 4, diff --git "a/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.md" "b/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.md" index 50bd6307085e523245d7723f6b1fc86b91a7edd3..4a1f966563d66d2899a6cfe8ff914ea5757fc7da 100644 --- "a/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.md" +++ "b/Numpy/5-Numpy\346\225\260\347\273\204\345\275\242\347\212\266\345\222\214\347\261\273\345\236\213\344\277\256\346\224\271.md" @@ -19,12 +19,30 @@ [0.52465668, 0.40275561, 0.85389365, 0.69344744], [0.06308938, 0.24195379, 0.43457003, 0.5855962 ]]) """ - print(arr2.reshape(2,6)) #默认按行 + + # np.reshape函数 + np.reshape(arr1,(4,3)) # 整形 + """ + array([[0.40919593, 0.53439411, 0.17478334], + [0.88506119, 0.52465668, 0.40275561], + [0.85389365, 0.69344744, 0.06308938], + [0.24195379, 0.43457003, 0.5855962 ]]) + """ + + np.reshape(arr1,(-1,3)) # -1从数组的长度和其余维度推断该值 + """ + array([[0.40919593, 0.53439411, 0.17478334], + [0.88506119, 0.52465668, 0.40275561], + [0.85389365, 0.69344744, 0.06308938], + [0.24195379, 0.43457003, 0.5855962 ]]) + """ + + print(arr1.reshape(2,6)) #默认按行 """ [[0.40919593 0.53439411 0.17478334 0.88506119 0.52465668 0.40275561] [0.85389365 0.69344744 0.06308938 0.24195379 0.43457003 0.5855962 ]] """ - print(arr2.reshape(6,2,order='F')) #按列 + print(arr1.reshape(6,2,order='F')) #按列 """ [[0.40919593 0.17478334] [0.52465668 0.85389365] @@ -34,14 +52,6 @@ [0.24195379 0.5855962 ]] """ - # np.reshape函数 - np.reshape(arr2,(-1,3)) # -1从数组的长度和其余维度推断该值 - """ - array([[0.40919593, 0.53439411, 0.17478334], - [0.88506119, 0.52465668, 0.40275561], - [0.85389365, 0.69344744, 0.06308938], - [0.24195379, 0.43457003, 0.5855962 ]]) - """ #在转换形状的时候,一定要注意元素的个数,不能发生改变! ``` @@ -74,7 +84,7 @@ #np.resize #缩小数组 a=np.array([[0,1],[2,3]]) - np.resize(a(1,2)) + np.resize(a, (1,2)) # array([[0, 1]]) a的值没有变化 #扩展数组 缺少的数据将由填充原数组的重复副本 diff --git "a/Numpy/6-Numpy\346\225\260\347\273\204\345\220\210\345\271\266\345\222\214\345\210\206\345\211\262.ipynb" "b/Numpy/6-Numpy\346\225\260\347\273\204\345\220\210\345\271\266\345\222\214\345\210\206\345\211\262.ipynb" index 0f40c5816ac1abe638630d479eec70ffa1aeca22..5074810d5001f844fc3ae04d0db2017a04fe6e6b 100644 --- "a/Numpy/6-Numpy\346\225\260\347\273\204\345\220\210\345\271\266\345\222\214\345\210\206\345\211\262.ipynb" +++ "b/Numpy/6-Numpy\346\225\260\347\273\204\345\220\210\345\271\266\345\222\214\345\210\206\345\211\262.ipynb" @@ -1,5 +1,199 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. np.reshpe" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr1的数值为:\n", + " [[0.25981729 0.58820879 0.38967422 0.07929356]\n", + " [0.81901286 0.61275097 0.16093066 0.58208422]\n", + " [0.00509568 0.06161982 0.72816168 0.05724808]]\n", + "整形:\n", + " [[0.25981729 0.58820879 0.38967422]\n", + " [0.07929356 0.81901286 0.61275097]\n", + " [0.16093066 0.58208422 0.00509568]\n", + " [0.06161982 0.72816168 0.05724808]]\n", + "推断尺寸整形:\n", + " [[0.25981729 0.58820879 0.38967422]\n", + " [0.07929356 0.81901286 0.61275097]\n", + " [0.16093066 0.58208422 0.00509568]\n", + " [0.06161982 0.72816168 0.05724808]]\n", + "内置方法整形:\n", + " [[0.25981729 0.58820879 0.38967422 0.07929356 0.81901286 0.61275097]\n", + " [0.16093066 0.58208422 0.00509568 0.06161982 0.72816168 0.05724808]]\n", + "按列整形:\n", + " [[0.25981729 0.38967422]\n", + " [0.81901286 0.16093066]\n", + " [0.00509568 0.72816168]\n", + " [0.58820879 0.07929356]\n", + " [0.61275097 0.58208422]\n", + " [0.06161982 0.05724808]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr1 = np.random.rand(3, 4)\n", + "print(\"arr1的数值为:\\n\", arr1)\n", + "print(\"整形:\\n\", np.reshape(arr1, newshape=(4, 3)))\n", + "print(\"推断尺寸整形:\\n\", np.reshape(arr1, newshape=(-1, 3)))\n", + "print(\"内置方法整形:\\n\", arr1.reshape(2, 6))\n", + "print(\"按列整形:\\n\", arr1.reshape(6, 2, order='F'))\n", + "# print(\"尺寸不匹配,会报错!\\n\", arr1.reshape(2, 7))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. np.resize" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a的值为:\n", + " [[0 1]\n", + " [2 3]]\n", + "resize变小结果:\n", + " [[0]\n", + " [1]]\n", + "b的值为:\n", + " [[0 1]\n", + " [2 3]]\n", + "resize变大结果:\n", + " [[0 1 2]\n", + " [3 0 1]]\n", + "resize变大结果:\n", + " [[0 1 2]\n", + " [3 0 0]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "a = np.array([[0, 1], [2, 3]])\n", + "print(\"a的值为:\\n\", a)\n", + "print(\"resize变小结果:\\n\", np.resize(a, new_shape=(2, 1)))\n", + "\n", + "b = np.array([[0, 1], [2, 3]])\n", + "print(\"b的值为:\\n\", b)\n", + "print(\"resize变大结果:\\n\", np.resize(b, (2, 3))) # 重复填充 b不变 返回结果\n", + "b.resize(2, 3)\n", + "print(\"resize变大结果:\\n\", b) # 0填充 b变化 返回None\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. ndarry.T" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr3的结果为:\n", + " [[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n", + "arr3的转置为:\n", + " [[ 0 4 8]\n", + " [ 1 5 9]\n", + " [ 2 6 10]\n", + " [ 3 7 11]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr3 = np.arange(12).reshape(3, 4)\n", + "print(\"arr3的结果为:\\n\", arr3)\n", + "print(\"arr3的转置为:\\n\", arr3.T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. ndarray.astype" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "one的数值为:\n", + " [[1. 1. 1. 1.]\n", + " [1. 1. 1. 1.]\n", + " [1. 1. 1. 1.]]\n", + "one的dtype:\n", + " float64\n", + "one的dtype:\n", + " int64\n", + "n1的dtype:\n", + " |S1\n", + "n1的dtype:\n", + " int32\n", + "n2的值为:\n", + " [[2.70246863 3.5541203 3.71455133 2.81316197]\n", + " [3.54408836 1.18779805 3.07021607 1.48175658]\n", + " [3.46603913 1.96586193 3.10018524 1.66149378]]\n", + "n2的值为:\n", + " [[2 3 3 2]\n", + " [3 1 3 1]\n", + " [3 1 3 1]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "one = np.ones(shape=(3, 4))\n", + "print(\"one的数值为:\\n\", one)\n", + "print(\"one的dtype:\\n\", one.dtype)\n", + "one = one.astype(np.int64) # 不改变one类型 返回值变化\n", + "print(\"one的dtype:\\n\", one.dtype)\n", + "\n", + "n1 = np.array(['1', '2', '3'], dtype=np.string_)\n", + "print(\"n1的dtype:\\n\", n1.dtype)\n", + "n1 = n1.astype(np.int32)\n", + "print(\"n1的dtype:\\n\", n1.dtype)\n", + "\n", + "n2 = np.random.uniform(1, 5, size=(3, 4))\n", + "print(\"n2的值为:\\n\", n2)\n", + "n2 = n2.astype(np.int32)\n", + "print(\"n2的值为:\\n\", n2) # 小数部分被截断" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -206,6 +400,50 @@ "print(\"拆分第第二个为:\\n\", arr2)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# np.hsplit\n", + "在一个市场调研项目中,你收集了四个商场一周内不同时间段顾客的流量数据,数据存储在二维数组arr = np.random.randint(1, 100, (4, 7))中,其中每一行代表一个商场,每一列代表一天。请使用np.hsplit函数拆分出工作日和周末的顾客流量数据,并打印分割后的数组。" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr的值为:\n", + " [[25 74 45 94 26 94 40]\n", + " [63 94 94 42 5 4 17]\n", + " [ 7 35 67 97 25 9 75]\n", + " [75 76 37 84 99 92 71]]\n", + "工作日数据:\n", + " [[25 74 45 94 26]\n", + " [63 94 94 42 5]\n", + " [ 7 35 67 97 25]\n", + " [75 76 37 84 99]]\n", + "周末数据:\n", + " [[94 40]\n", + " [ 4 17]\n", + " [ 9 75]\n", + " [92 71]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr = np.random.randint(1, 100, (4, 7))\n", + "print(\"arr的值为:\\n\", arr)\n", + "week_arr, weekend_arr = np.hsplit(arr, [5])\n", + "print(\"工作日数据:\\n\", week_arr)\n", + "print(\"周末数据:\\n\", weekend_arr)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -249,18 +487,31 @@ "metadata": {}, "source": [ "# np.repeat\n", - "假设你正在统计一个学校不同班级的学生人数。每个班级的学生人数由一维数组arr = np.array([10, 20, 30, 40])表示。如果每个班级需要增加2名学生,请使用np.repeat函数将每个元素重复2次,并打印结果数组。" + "数组arr = np.array([110, 120, 130, 135, 150])表示一个宿舍5名学生的体重。宿舍调整,增加了2个130斤的同学,一个150斤的同学,请使用np.repeat函数统计现在宿舍成员的体重,并打印结果数组。" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数组的值为:\n", + " [110 120 130 135 150]\n", + "更新后的数组值为:\n", + " [110 120 130 130 130 135 150 150]\n" + ] + } + ], "source": [ "import numpy as np\n", - "arr = np.array([10, 20, 30, 40])\n", - "print()" + "arr = np.array([110, 120, 130, 135, 150])\n", + "print(\"数组的值为:\\n\", arr)\n", + "repeated_arr = arr.repeat([1, 1, 3, 1, 2])\n", + "print(\"更新后的数组值为:\\n\", repeated_arr)" ] } ], diff --git "a/Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.ipynb" "b/Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.ipynb" new file mode 100644 index 0000000000000000000000000000000000000000..baa8835eb7abdd373828df8559003e47581e88b1 --- /dev/null +++ "b/Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.ipynb" @@ -0,0 +1,255 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. NumPy数组算术" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数组的值为:\n", + " [[6 2 6]\n", + " [9 8 3]]\n", + "标量与数组组合:\n", + " [[12 4 12]\n", + " [18 16 6]]\n", + "相同尺寸的数组运算:\n", + " [[36 4 36]\n", + " [81 64 9]]\n", + "标量与数组的逻辑运算:\n", + " [[ True False True]\n", + " [ True True False]]\n", + "同尺寸数组的逻辑运算:\n", + " [[ True True True]\n", + " [ True True True]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr1 = np.random.randint(10, size=(2, 3))\n", + "print(\"数组的值为:\\n\", arr1)\n", + "print(\"标量与数组组合:\\n\", arr1 * 2)\n", + "print(\"相同尺寸的数组运算:\\n\", arr1 * arr1)\n", + "print(\"标量与数组的逻辑运算:\\n\", arr1 > 5)\n", + "print(\"同尺寸数组的逻辑运算:\\n\", arr1 == arr1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. 广播的规则" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "数组的值为:\n", + " [[ 0 1 2]\n", + " [ 3 4 5]\n", + " [ 6 7 8]\n", + " [ 9 10 11]]\n", + "数组2的值为:\n", + " [1 2 3]\n", + "arr1的shape:\n", + " (4, 3)\n", + "arr2的shape:\n", + " (3,)\n", + "两数组相加的值为:\n", + " [[ 1 3 5]\n", + " [ 4 6 8]\n", + " [ 7 9 11]\n", + " [10 12 14]]\n", + "arr4的值为:\n", + " [[1]\n", + " [2]\n", + " [3]\n", + " [4]]\n", + "arr4的shape:\n", + " (4, 1)\n", + "arr5的值为:\n", + " [[ 1 2 3]\n", + " [ 5 6 7]\n", + " [ 9 10 11]\n", + " [13 14 15]]\n" + ] + } + ], + "source": [ + "arr1 = np.arange(12).reshape(4, 3)\n", + "print(\"数组的值为:\\n\", arr1)\n", + "arr2 = np.array([1, 2, 3])\n", + "print(\"数组2的值为:\\n\", arr2)\n", + "print(\"arr1的shape:\\n\", arr1.shape)\n", + "print(\"arr2的shape:\\n\", arr2.shape)\n", + "arr3 = arr1 + arr2\n", + "print(\"两数组相加的值为:\\n\", arr3) # 广播在丢失的轴上\n", + "arr4 = np.arange(1, 5).reshape(4, 1)\n", + "print(\"arr4的值为:\\n\", arr4)\n", + "print(\"arr4的shape:\\n\", arr4.shape)\n", + "arr5 = arr1 + arr4\n", + "print(\"arr5的值为:\\n\", arr5) # 广播在长度为1的轴上\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 标量广播\n", + "假设你正在分析一个实验的数据arr = np.random.randint(10, size=(3,4)),目前数据发生了偏移,需要整体加5,请使用广播的特性将数字5加到数组的每个元素上,并打印结果。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr的数值为:\n", + " [[7 6 4 6]\n", + " [8 1 2 0]\n", + " [6 0 8 9]]\n", + "new_arr的结果为:\n", + " [[12 11 9 11]\n", + " [13 6 7 5]\n", + " [11 5 13 14]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr = np.random.randint(10, size=(3, 4))\n", + "print(\"arr的数值为:\\n\", arr)\n", + "new_arr = arr + 5\n", + "print(\"new_arr的结果为:\\n\", new_arr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 广播规则\n", + "给定两个数组,arr1 = np.arange(12).reshape(4,3)和arr2 = np.array([1,2,3])。请使用广播的特性计算两个数组相加的结果,并打印。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr1的数值为:\n", + " [[ 0 1 2]\n", + " [ 3 4 5]\n", + " [ 6 7 8]\n", + " [ 9 10 11]]\n", + "arr2的数值为:\n", + " [[1 2 3]]\n", + "arr2的形状为:\n", + " (1, 3)\n", + "arr1+arr2的结果为:\n", + " [[ 1 3 5]\n", + " [ 4 6 8]\n", + " [ 7 9 11]\n", + " [10 12 14]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr1 = np.arange(12).reshape(4, 3)\n", + "arr2 = np.array([[1, 2, 3]])\n", + "print(\"arr1的数值为:\\n\", arr1)\n", + "print(\"arr2的数值为:\\n\", arr2)\n", + "print(\"arr2的形状为:\\n\", arr2.shape) # 缺少了一维\n", + "print(\"arr1+arr2的结果为:\\n\", arr1 + arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 广播\n", + "你有一组数据arr1 = np.arange(12).reshape(3,4),现在希望在第一行数据上加2,在第二行数据上加4,第三行数据上加6。请使用广播的特性实现,并打印。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr1的数值为:\n", + " [[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n", + "arr2的数值为:\n", + " [[2]\n", + " [4]\n", + " [6]]\n", + "(3, 1)\n", + "arr1+arr2的数值为:\n", + " [[ 2 3 4 5]\n", + " [ 8 9 10 11]\n", + " [14 15 16 17]]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "arr1 = np.arange(12).reshape(3, 4)\n", + "print(\"arr1的数值为:\\n\", arr1)\n", + "arr2 = np.array([[2], [4], [6]])\n", + "print(\"arr2的数值为:\\n\", arr2) \n", + "print(arr2.shape) # 一个轴长度为1\n", + "print(\"arr1+arr2的数值为:\\n\", arr1+arr2)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python-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.8.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git "a/Numpy/Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" "b/Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" similarity index 82% rename from "Numpy/Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" rename to "Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" index 2fa2425109819e4187e795a2133983797e0f75c5..d8b6f2ee01ed2a64fb452f9d175192a07a610233 100644 --- "a/Numpy/Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" +++ "b/Numpy/7-Numpy\346\225\260\347\273\204\345\271\277\346\222\255.md" @@ -27,7 +27,7 @@ [64, 1, 25, 16]]) """ - #在前面逻辑运算的时候我们已经讲过了,同尺寸的数组可以比较,得到的是一个布尔数组 + # 同尺寸的数组可以比较,得到的是一个布尔数组 ``` 3. `广播的规则`:**对于每个结尾维度(从尾部开始),轴的长度都匹配或者相对应的轴一方长度是1,那么则认为可以兼容广播的,广播会在丢失的或在长度为1的轴上进行**。 @@ -91,20 +91,17 @@ #案例中丢失的是1轴,按'行'进行广播沿着轴1对二维数组进行广播 ``` - ![](广播,沿0轴,列进行广播.png) + ![一维数组在轴0上的广播](./一维数组在轴0上的广播.png) -![](广播。沿1轴,行进行广播.png) +![](./二维数组在轴1上的广播.png) -![](三维广播沿0轴.png) +![](./三维数组的轴0上的广播.png) **总结** -1. 操作两个数组,先比较数组的shape:`a.维度相等,b.相对应的轴长度为1` - -2. 所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐 - +1. 所谓数组广播:当两个形状不同的数组进行运算时,将其中形状小的数组变成和形状大的一样 +2. 在小数组上,沿着长度为1或者缺失的轴复制数组,使之与大数组相同大小 3. 输出数组的shape是输入数组shape的各个轴上的最大值 - diff --git "a/Numpy/\344\270\200\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" "b/Numpy/\344\270\200\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..1043bdb3baeca925a8717fa1aa898d30fd21b587 Binary files /dev/null and "b/Numpy/\344\270\200\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" differ diff --git "a/Numpy/\344\270\211\347\273\264\346\225\260\347\273\204\347\232\204\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" "b/Numpy/\344\270\211\347\273\264\346\225\260\347\273\204\347\232\204\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..27518dd5962873db1f1d254425c4b223fc94fc5c Binary files /dev/null and "b/Numpy/\344\270\211\347\273\264\346\225\260\347\273\204\347\232\204\350\275\2640\344\270\212\347\232\204\345\271\277\346\222\255.png" differ diff --git "a/Numpy/\344\272\214\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2641\344\270\212\347\232\204\345\271\277\346\222\255.png" "b/Numpy/\344\272\214\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2641\344\270\212\347\232\204\345\271\277\346\222\255.png" new file mode 100644 index 0000000000000000000000000000000000000000..ac998ff74ac25a484d255a5d7b318a11663d7613 Binary files /dev/null and "b/Numpy/\344\272\214\347\273\264\346\225\260\347\273\204\345\234\250\350\275\2641\344\270\212\347\232\204\345\271\277\346\222\255.png" differ