{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 人工智能与机器学习-实验1\n", "\n", "## Part.II Numpy练习\n", "\n", "|学号 |姓名 |\n", "|----------|--------|\n", "|***REMOVED***|***REMOVED***|\n", "|2020113874|何一涛|" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 数组\n", "\n", "创建一个长度为10全为0的一维数组,然后让第5个元素等于1。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n" ] } ], "source": [ "import numpy as np\n", "a = np.zeros(10)\n", "a[4] = 1\n", "print(a)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 向量内积\n", "\n", "随机生成2个长度为$10^6$的向量,分别用numpy函数和for循环计算其内积。并比较耗时情况。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "250200.07698508396\n", "numpy:0.9696483612060547ms\n", "250200.07698508215\n", "for:509.42516326904297ms\n" ] } ], "source": [ "import numpy as np\n", "import time\n", "a = np.random.rand(1000000)\n", "b = np.random.rand(1000000)\n", "tic = time.time()\n", "c = np.dot(a,b)\n", "toc = time.time()\n", "print(c)\n", "print(\"numpy:\" + str(1000*(toc-tic)) + \"ms\")\n", "c = 0\n", "tic = time.time()\n", "for i in range(1000000):\n", " c += a[i]*b[i]\n", "toc = time.time()\n", "print(c)\n", "print(\"for:\" + str(1000*(toc-tic)) + \"ms\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. 矩阵乘法\n", "\n", "生成一个$4\\times5$和一个$5\\times4$的矩阵,并计算它们的乘积。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.23931254 0.18071967 0.37310061 0.12620676 0.13512026]\n", " [0.30783951 0.91376617 0.67098953 0.32039883 0.01034717]\n", " [0.96111339 0.50345747 0.44325113 0.69203477 0.68494092]\n", " [0.72068532 0.70385745 0.863872 0.04211034 0.64406034]]\n", "[[0.77360967 0.69983706 0.6007846 0.86168637]\n", " [0.81774926 0.45233242 0.25631712 0.78721015]\n", " [0.70753124 0.97739082 0.85224573 0.38800176]\n", " [0.99206956 0.76979289 0.32823954 0.65932597]\n", " [0.28726144 0.0885248 0.9055978 0.25378116]]\n", "[[0.76091893 0.72300482 0.67186089 0.61074278]\n", " [1.78095556 1.5321393 1.10554506 1.45880543]\n", " [2.35214635 1.9269402 1.93165995 2.02658896]\n", " [1.97111455 1.75651195 1.94670048 1.70148712]]\n" ] } ], "source": [ "import numpy as np\n", "a = np.random.rand(4,5)\n", "b = np.random.rand(5,4)\n", "c = np.dot(a,b)\n", "print(a)\n", "print(b)\n", "print(c)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. 函数\n", "\n", "函数$f$定义如下,其中$x$是任意实数:\n", "$$\n", "f(x)=\\frac{\\sin⁡(x+1)(x+1)}{2e^x}\n", "$$,\n", "\n", "生成一个数组$a\\in \\mathbb{R}^5$,计算$b = f(a)$。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.11783325 0.48074153 0.73572425 0.20476283 0.88648351]\n", "[0.44669072 0.45593449 0.41020043 0.45832847 0.36950327]\n" ] } ], "source": [ "import numpy as np\n", "def f(x):\n", " return np.sin(x+1)*(x+1)/(2*np.exp(x))\n", "a = np.random.rand(5)\n", "b = f(a)\n", "print(a)\n", "print(b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. 平均值\n", "\n", "随机生成一个5行10列的矩阵,然后每行元素减去该行的平均值" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.24236313 0.55447699 0.95304607 0.79666384 0.92822022 0.27138421\n", " 0.47722097 0.74169242 0.21323861 0.83588465]\n", " [0.81246374 0.77727719 0.45686829 0.08864242 0.00963438 0.50045921\n", " 0.51131599 0.1215012 0.16156761 0.9299535 ]\n", " [0.53098614 0.39056825 0.4658711 0.26826016 0.42102393 0.11597775\n", " 0.8880885 0.96429013 0.79650161 0.42915054]\n", " [0.71644738 0.84851284 0.03352013 0.89332467 0.3272176 0.67425642\n", " 0.58702405 0.39927189 0.56726108 0.92623776]\n", " [0.30084031 0.32070728 0.05854519 0.83081661 0.70783952 0.20550454\n", " 0.08244311 0.93941383 0.13424483 0.71656674]]\n", "[[-0.35905598 -0.04694212 0.35162696 0.19524473 0.32680111 -0.3300349\n", " -0.12419814 0.14027331 -0.3881805 0.23446554]\n", " [ 0.37549539 0.34030884 0.01989994 -0.34832593 -0.42733397 0.06349086\n", " 0.07434764 -0.31546716 -0.27540075 0.49298515]\n", " [ 0.00391433 -0.13650356 -0.06120071 -0.25881165 -0.10604788 -0.41109406\n", " 0.36101669 0.43721832 0.2694298 -0.09792127]\n", " [ 0.11913999 0.25120546 -0.56378725 0.29601729 -0.27008979 0.07694904\n", " -0.01028333 -0.19803549 -0.0300463 0.32893038]\n", " [-0.12885189 -0.10898492 -0.37114701 0.40112441 0.27814732 -0.22418765\n", " -0.34724909 0.50972163 -0.29544737 0.28687455]]\n" ] } ], "source": [ "import numpy as np\n", "a = np.random.rand(5,10)\n", "b = a - np.mean(a,axis=1,keepdims=True)\n", "print(a)\n", "print(b)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.7" }, "vscode": { "interpreter": { "hash": "1f0d395e06aa83586067b19165efc9b683889967164248deef4bbf1fa27cfb00" } } }, "nbformat": 4, "nbformat_minor": 2 }