This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
justhomework/AIandML/e1_python_basics/e1.1_numpy.ipynb
2023-06-18 15:57:59 +08:00

248 lines
6.5 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 人工智能与机器学习-实验1\n",
"\n",
"## Part.II Numpy练习\n",
"\n",
"|学号 |姓名 |\n",
"|----------|--------|\n",
"|2020114490|江一和|\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
}