AI大模型从0到1记录学习numpy pandas day24
第 1 章 环境搭建
1.1 Anaconda
1.1.1 什么是Anaconda
Anaconda官网地址:https://www.anaconda.com/
简单来说,Anaconda = Python + 包和环境管理器(Conda)+ 常用库 + 集成工具。它适合那些需要快速搭建数据科学或机器学习开发环境的用户。Anaconda和Python相当于是汽车和发动机的关系,安装Anaconda后,就像买了一台车,无需自己去安装发动机和其他零配件,而Python作为发动机提供Anaconda工作所需的内核。
Anaconda包及其依赖项和环境的管理工具为 conda 命令,与传统的 Python pip 工具相比Anaconda的conda可以更方便地在不同环境之间进行切换,环境管理较为简单。
为什么选择 Anaconda?
方便安装: 安装 Anaconda 就像安装一个应用程序一样简单,它为您预先安装好了许多常用的工具,无需单独配置。
包管理器: Anaconda 包含一个名为 Conda 的包管理器,用于安装、更新和管理软件包。Conda 不仅限于 Python,还支持多种其他语言的包管理。
环境管理: 使用 Anaconda,您可以轻松地创建和管理多个独立的 Python 环境,比如可以安装 python2 和 python3 环境,然后实现自由切换。这对于在不同项目中使用不同的库和工具版本非常有用,以避免版本冲突。
集成工具和库: Anaconda 捆绑了许多用于数据科学、机器学习和科学计算的重要工具和库,如 NumPy、Pandas、Matplotlib、SciPy、Scikit-learn 等。
Jupyter 笔记本: Jupyter 是一个交互式的计算环境,支持多种编程语言,但在 Anaconda 中主要用于 Python。它允许用户创建和共享包含实时代码、方程式、可视化和叙述文本的文档。
Spyder 集成开发环境: Anaconda 中集成了 Spyder,这是一个专为科学计算和数据分析而设计的开发环境,具有代码编辑、调试和数据可视化等功能。
跨平台性: Anaconda可在Windows、macOS和 Linux等操作系统上运行,使其成为一个跨平台的解决方案。
社区支持: Anaconda 拥有庞大的社区,用户可以在社区论坛上获取帮助、分享经验和解决问题。
1.1.2 Anaconda下载
1)进入官网,点击右上角Free Download
2)点击右下方Skip registration跳过注册
3)点击Download下载,或选择相应的操作系统和版本进行下载
1.1.3 Anaconda安装
1)双击安装包进入安装
2)点击Next
3)点击I Agree
4)点击Next
5)修改安装路径,点击Next
6)酌情修改安装选项,之后点击Install安装,等待安装完成
安装选项依次为:
创建快捷方式-默认选中。为Anaconda Navigator、Spyder、Jupyter Notebook和Anaconda Prompt软件包创建“开始”菜单快捷方式。
将Anaconda3添加到我的PATH环境变量,将包含conda二进制文件的路径添加到path环境变量中。Anaconda不建议选择此选项。conda二进制文件路径包含其他包二进制文件,这些二进制文件将添加到path环境变量中,即使当前没有处于活动状态的conda环境也是如此。这使得其他软件可以使用这些软件包文件,这可能会导致错误。可以勾选,也可以在安装后手动添加环境变量。
注册Anaconda3作为我的默认Python 3.12-默认选中。将此安装中的Python包注册为VSCode,PyCharm等程序的默认Python。
安装完成后清除包缓存。
7)安装完成后,点击Next
8)再次点击Next
9)点击Finish,完成安装
10)若在安装时勾选添加环境变量,会在用户环境变量的Path中添加相应路径;若安装时没有勾选添加环境变量,则需要在安装后手动添加环境变量。Windows操作系统下同时按下“Win+S”打开搜索栏,搜索“编辑系统环境变量”可进入查看和编辑环境变量
11)单击右下角环境变量,双击上半部分用户变量中的Path,若先前安装时勾选了添加环境变量,在此可查看到已添加的路径
12)若先前安装时未勾选添加环境变量,则需找到先前安装时设定的Anaconda安装路径。此处为“D:\ProgramFiles\anaconda3”,需对照自己的安装路径,在环境变量中点击“新建”依次添加如下路径:
D:\ProgramFiles\anaconda3(Anaconda安装路径)
D:\ProgramFiles\anaconda3\Library\mingw-w64\bin(Anaconda安装路径\Library\mingw-w64\bin)
D:\ProgramFiles\anaconda3\Library\usr\bin(Anaconda安装路径\Library\usr\bin)
D:\ProgramFiles\anaconda3\Library\bin(Anaconda安装路径\Library\bin)
D:\ProgramFiles\anaconda3\Scripts(Anaconda安装路径\Scripts)
13)按下“Win+R”,输入“cmd”,点击确定,打开命令提示符
14)输入conda info查看conda信息,输入python --version查看Python版本。Anaconda安装成功
15)因conda默认源服务器在海外,使用默认源下载第三方库时可能由于网络问题导致下载失败,故在此配置国内源。在命令提示符中执行conda config --set show_channel_urls yes,会在“C:\Users(用户)\用户名”路径下生成“.condarc”文件
16)双击“.condarc”文件,选择使用记事本打开,删除其中所有内容,并粘贴如下内容之后保存,这样就配置好了国内清华源
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
show_channel_urls: true
1.1.4 Ubuntu安装Anaconda
1)在/opt目录下创建module与software目录,并修改所属主与所属组为atguigu
cd /opt
sudo mkdir module software
sudo chown atguigu:atguigu module software
2)将Anaconda的.sh文件放入software目录中
3)执行脚本开始安装Anaconda
bash Anaconda3-2024.10-1-Linux-x86_64.sh
4)按下回车继续
5)持续按↓直到提示输入yes或no,按下回车
6)需要指定安装路径,输入/opt/module/anaconda3,回车,等待安装完成
7)安装后会询问是否进行conda初始化,注意此处默认为no,需要输入yes
8)如果没有选择yes,需要手动进行初始化,进入conda安装目录的bin目录下,执行conda init命令
cd /opt/module/anaconda3/bin
./conda init
9)初始化完毕后会提示需要重启shell,断开连接并重新连接虚拟机即可
10)重新连接后发现命令行会提示当前处于哪个conda环境,此处为base环境
11)配置国内镜像源
配置文件.condarc在 /home/用户名 目录下。
vim ~/.condarc
修改为如下内容:
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
保存退出。
1.1.5 Ubuntu卸载Anaconda
1)停用 Anaconda 环境
在卸载之前,需要确保当前没有激活 Anaconda 环境。可以通过以下命令来停用当前激活的 Anaconda 环境:
conda deactivate
执行该命令后,会退出当前的 Anaconda 环境。
2)删除 Anaconda 安装目录
rm -rf /opt/module/anaconda3/
3)移除环境变量配置
Anaconda 安装时会在用户的配置文件(如/.bashrc、/.zshrc等)中添加环境变量。需要手动编辑这些文件,移除与 Anaconda 相关的环境变量配置。
对于bash用户
nano ~/.bashrc
在打开的文件中,找到类似以下内容的行并删除:
>>> conda initialize >>>
!! Contents within this block are managed by ‘conda init’ !!
__conda_setup=“$(‘/home/your_username/anaconda3/bin/conda’ ‘shell.bash’ ‘hook’ 2> /dev/null)”
if [ ? − e q 0 ] ; t h e n e v a l " ? -eq 0 ]; then eval " ?−eq0];theneval"__conda_setup"
else
if [ -f “/home/your_username/anaconda3/etc/profile.d/conda.sh” ]; then
. “/home/your_username/anaconda3/etc/profile.d/conda.sh”
else
export PATH=“/home/your_username/anaconda3/bin:$PATH”
fi
fi
unset __conda_setup
<<< conda initialize <<<
编辑完成后,按Ctrl + X,然后按Y确认保存,最后按Enter退出nano编辑器。
对于zsh用户
使用以下命令编辑~/.zshrc文件:
nano ~/.zshrc
同样找到并删除与 Anaconda 相关的环境变量配置,编辑完成后保存退出。
4)使配置文件生效
source ~/.bashrc # 如果你使用的是bash
source ~/.zshrc # 如果你使用的是zsh
5)清理残留文件(可选)
有时候,Anaconda 可能会在系统中留下一些残留的配置文件和缓存。可以手动删除这些文件:
rm -rf ~/.condarc ~/.conda ~/.continuum ~/.jupyter
完成以上步骤后,Anaconda 就已经从你的 Ubuntu 系统中彻底卸载了。
1.1.6 conda常用命令
1)环境管理
功能 命令
创建环境 conda create -n <环境名> python=<版本号>
例如:conda create -n env1 python=3.12
激活环境 conda activate <环境名>
例如:conda activate env1
退出环境 conda deactivate
列出所有环境 conda env list 或 conda info --env
删除环境 conda remove -n <环境名> --all
例如:conda remove -n env1 --all
查看conda信息 conda info
2)软件包管理
功能 命令
安装软件包 conda install <包名>
例如:conda install numpy
指定版本安装软件包 conda install <包名>=<版本号>
例如:conda install numpy=1.26.4
更新软件包 conda update <包名>
例如:conda update pandas
卸载软件包 conda remove <包名>
例如:conda remove matplotlib
注意:虚拟新的环境起到的作用是环境隔离,项目间相互不影响,如果使用pycharm在指定anaconda解释器的时候,会自动创建虚拟环境。
1.2 Jupyter
Jupyter 是一个开源的交互式计算环境,广泛应用于数据科学、机器学习、科学研究等领域,主要组件有Jupyter Notebook和Jupyter Lab。JupyterLab作为Jupyter Notebook 的继承者,提供了更现代化和功能丰富的界面。JupyterLab的多文档界面、内置协作功能和扩展系统使其成为数据科学家和研究人员的首选。
1.2.1 使用本地Jupyter
1)命令提示符中输入jupyter lab或jupyter notebook,会弹出浏览器页面直接进入主页面
C:\Users\fuxiaofeng>jupyter lab
注意:由于网络等原因,可能导致访问时候出现警告,可以忽略。
1.2.2 PyCharm中集成Jupyter
Pycharm界面提供了对Jupyter Notebook的集成
1)进入到设置
2)添加新的解释器
3)解释器类型选择Conda
4)为了避免出错,环境改变后,重启pycharm
5)创建Jupyter Notebook文件
会在当前项目下创建新的conda环境,新的conda环境中没有Jupyter,如果运行的话会自动在当前环境下安装。
1.2.3 使用远程JupyterServer
1)虚拟机中输入jupyter notebook --generate-config命令,创建jupyter配置文件
文件会创建在用户家目录/.jupyter目录下
2)创建登录密码
在命令行中输入如下命令,之后输入两次密码,密码会写入配置文件中:
jupyter-lab password
3)修改上面生成的配置文件,添加配置
进入配置文件:
vim /home/atguigu/.jupyter/jupyter_notebook_config.py
添加如下配置:
c.ServerApp.ip = ‘*’ # 允许所有ip访问
c.ServerApp.open_browser = False # 不自动打开浏览器
c.ServerApp.port = 8888 # 指定端口,默认8888
保存退出。
4)虚拟机中输入jupyter lab命令,启动jupyter server
启动后会返回访问链接,远程访问时需要将链接中的localhost或127.0.0.1修改为虚拟机的主机名或虚拟机ip。
5)在浏览器中输入链接并输入密码,远程使用jupyter notebook
6)PyCharm中打开Settings设置,在Languages & Frameworks下的Jupyter下的Jupyter Servers中的Configured Server中填写链接并输入密码
7)PyCharm中新建一个.ipynb文件
8)也可以在.ipynb文件上方配置远程Jupyter服务链接
1.2.4 Jupyter快捷键
esc:从输入模式退出到命令模式
a:在当前cell上面创建一个新的cell
b:在当前cell 下面创建一个新的cell
dd:删除当前cell
m:切换到markdown模式
y:切换到code模式
ctrl+回车:运行cell
shift +回车:运行当前cell并创建一个新的cell
第 2 章 Numpy
2.1 什么是numpy
numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
numpy的部分功能如下:
ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
线性代数、随机数生成以及傅里叶变换功能。
用于集成由C、C++、Fortran等语言编写的代码的API。
2.2 ndarray的限制
大多数numpy数组都有一些限制:
数组的所有元素必须具有相同的数据类型。
一旦创建,数组的总大小就不能改变。
形状必须是“矩形”,而不是“锯齿状”。例如二维数组的每一行必须具有相同的列数。
2.3 ndarray的属性
1)先安装numpy包
2)如果在Pycharm中加载不出来,可以通过如下命令安装
C:\Users\fuxiaofeng>conda activate python-2025-conda
(python-2025-conda) C:\Users\fuxiaofeng>conda install numpy
3)ndarray属性案例
import numpy as np # 导入numpy
a = np.array([[1, 2, 3], [4, 5, 6]]) # 创建一个二维数组
print(a)
print(a.ndim) # 维度
print(a.shape) # 形状
print(a.size) # 元素个数
print(a.dtype) # 数据类型
print(a.itemsize) # 每个元素字节数大小
2.4 ndarray的创建方式
2.4.1 array()与asarray()
array():将输入数据转换为ndarray,会进行copy。
asarray():将输入数据转换为ndarray,如果输入本身是ndarray则不会进行copy。
数组的创建方式
“”"
array:将输入的数据转换为ndarray,会进行copy
asarray:将输入的数据转换为ndarray,如果输入本身是ndarray,则不会进行copy
“”"
import numpy as np
data = [1,2,3]
print(f"元数据地址为:{id(data)}“)
arr = np.array(data)
print(f"arr1地址为:{id(arr)}”)
print(f"数组数据为:{arr}")
print(“-” * 20)
arr2 = np.array(arr)
print(f"arr2地址为:{id(arr2)}“)
print(f"arr2数组数据为:{arr2}”)
print(“-” * 20)
arr3 = np.asarray(arr)
print(f"arr3地址为:{id(arr3)}“)
print(f"arr3数组数据为:{arr3}”)
2.4.2 zeros()、ones()、empty()与zeros_like()、ones_like()、empty_like()
zeros():返回给定形状和类型的新数组,用0填充。
ones():返回给定形状和类型的新数组,用1填充。
empty():返回给定形状和类型的未初始化的新数组。
需要注意的是,np.empty 并不保证数组元素被初始化为 0,它只是分配内存空间,数组中的元素值是未初始化的,可能是内存中的任意值。
上述3个方法创建的数组元素类型默认都是float64。
zeros_like():返回与给定数组具有相同形状和类型的0新数组。
ones_like():返回与给定数组具有相同形状和类型的1新数组。
empty_like():返回与给定数组具有相同形状和类型的未初始化的新数组。
arr1 = np.zeros((2, 5)) # 创建全0数组
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
arr2 = np.ones_like(arr1) # 创建和arr1形状相同的全1数组
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
arr3 = np.empty((2, 3)) # 创建未初始化的数组
[[-9.05243306e-312 -1.06658093e-264 9.05246807e-312]
[ 9.05246807e-312 6.91691904e-323 2.96439388e-323]]
arr4 = np.empty_like(arr3) # 创建和arr3形状相同的未初始化数组
[[-6.95272242e-310 1.22635717e+139 9.05246806e-312]
[ 9.05246806e-312 1.33397724e-322 4.15015143e-322]]
注意:这里元素间的分隔符是空格,而不是小数点 .
2.4.3 full()与full_like()
full():返回给定形状和类型的新数组,用指定的值填充。
full_like():返回与给定数组具有相同形状和类型的用指定值填充的新数组。
arr1 = np.full((2, 3), 6)
[[6 6 6]
[6 6 6]]
arr2 = np.full_like(arr1, 5)
[[5 5 5]
[5 5 5]]
2.4.4 arange()
arange():返回在给定范围内用均匀间隔的值填充的一维数组。
arr1 = np.arange(0, 10, 2)
[0 2 4 6 8]
2.4.5 linspace()与logspace()
linspace():返回指定范围和元素个数的等差数列。数组元素类型为浮点型。
logspace():返回指定指数范围、元素个数、底数的等比数列。
arr1 = np.linspace(start=0, stop=10, num=5)
[ 0. 2.5 5. 7.5 10. ]
arr2 = np.linspace(start=0, stop=10, num=5, endpoint=False) # 设置endpoint=False,表示不包括stop
[0. 2. 4. 6. 8.]
arr3 = np.logspace(start=2, stop=5, num=5, base=2)
[ 4. 6.72717132 11.3137085 19.02731384 32. ]
默认endpoint=True时
如果把0到10看作一条线段,相当于用5个点将这条线段分成了4段,要计算每段的长度(即相邻元素的间隔),用总长度 (stop - start) 除以段数 (num - 1) ,得到间隔为 10-0 / 4 = 2.5。这样从起始点 0 开始,每次加上间隔 2.5 就能依次得到序列中的元素:0、2.5、5、7.5、10 。
若 endpoint=False 的情况
当 endpoint=False 时,意味着 stop 这个值不包含在生成的序列中,此时 [start, stop) 区间相当于一条右端点空心(不包含 stop 这个点)的线段。我们在这条线段上放置 num 个点进行划分,每一个点都会划分出一个新的区间段。比如,放 1 个点会把线段分成 1 段,放 2 个点会分成 2 段,放 num 个点就会分成 num 段,段数就等于点数 num,计算间隔的公式就变为 (stop - start) / num 。
2.4.6 创建随机数数组
random.rand():返回给定形状的数组,用 [0, 1) 上均匀分布的随机样本填充。
random.randint():返回给定形状的数组,用从低位(包含)到高位(不包含)上均匀分布的随机整数填充。
random.uniform():返回给定形状的数组,用从低位(包含)到高位(不包含)上均匀分布的随机浮点数填充。
random.randn():返回给定形状的数组,用标准正态分布(均值为0,标准差为1)的随机样本填充。
arr1 = np.random.rand(2, 3)
[[0.77112868 0.97415392 0.25668864]
[0.49946961 0.23491874 0.40514576]]
arr2 = np.random.randint(0, 10, (2, 3))
[[7 8 2]
[1 2 3]]
arr3 = np.random.uniform(3, 6, (2, 3))
[[5.69275495 3.84857937 3.2899215 ]
[5.32035519 3.7460973 3.33859905]]
arr4 = np.random.randn(2, 3)
[[-2.03654925 -0.50146561 0.4362483 ]
[-1.90585739 0.94797017 -0.77026926]]
2.4.7 matrix()
matrix为ndarray的子类,只能生成二维的矩阵。
arr1 = np.matrix(“1 2; 3 4”)
[[1 2]
[3 4]]
arr2 = np.matrix([[1, 2], [3, 4]])
[[1 2]
[3 4]]
2.5 ndarray的数据类型
数据类型 类型代码 说明
bool ? 布尔类型
int8、uint8
int16、uint16
int32、uint32
int64、uint64 i1,u1
i2,u2
i4,u4
i8,u8 有符号、无符号的8位(1字节)整型
有符号、无符号的16位(2字节)整型
有符号、无符号的32位(4字节)整型
有符号、无符号的64位(8字节)整型
float16
float32
float64 f2
f4或f
f8或d 半精度浮点型
单精度浮点型
双精度浮点型
complex64
complex128 c8
c16 用两个32位浮点数表示的复数
用两个64位浮点数表示的复数
创建数组时可以使用dtype参数指定元素类型:
arr1 = np.array([1, 2, 3], dtype=np.float64)
[1. 2. 3.]
arr2 = np.array([0.2, 2.5, 4.8], dtype=“i8”)
[0 2 4]
也可以使用ndarray.astype()方法转换数组的元素类型:
arr1 = np.array([1, 2, 3], dtype=np.float64)
[1. 2. 3.]
arr2 = arr1.astype(np.int64)
[1 2 3]
2.6 ndarray切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
可以通过内置的slice函数,或者冒号设置start, stop及step参数进行切片,从原数组中切割出一个新数组。
import numpy as np
arr = np.arange(10)
print(arr)
[0 1 2 3 4 5 6 7 8 9
#获取索引为2的数据
print(arr[2])
2
从索引 2开始到索引9(不包含)停止,间隔为2
print(arr[slice(2,9,2)])
[2 4 6 8]
从索引2开始到索引9(不包含)停止,间隔为2
print(arr[2:9:2])
[2 4 6 8]
从索引2开始到最后(不包含),默认间隔为1
print(arr[2:])
[2 3 4 5 6 7 8 9]
从索引2开始到索引9(不包含)结束,默认间隔为1
print(arr[2:9])
[2 3 4 5 6 7 8]
2.7 numpy常用函数
2.7.1 基本函数
函数 说明
np.abs() 元素的绝对值,参数是 number 或 array
np.ceil() 向上取整,参数是 number 或 array
np.floor() 向下取整,参数是 number 或 array
np.rint() 四舍五入,参数是 number 或 array
四舍六入:当需要舍入的数字小于 5 时,直接舍去;当需要舍入的数字大于 5 时,进位。
五成双:当需要舍入的数字恰好是 5 时,会看 5 前面的数字,如果是偶数则直接舍去 5,如果是奇数则进位。
np.isnan() 判断元素是否为NaN(Not a Number) ,参数是 number 或 array
np.multiply() 元素相乘,参数是 number 或 array。如果第二个参数传递的是number,原数组中所有元素乘以这个数字,返回新的数组;如果第二个参数也是一个数组,是将两个数组中对应位置的元素相乘,返回一个新的数组,其形状与输入数组相同。
np.divide() 元素相除,参数是 number 或 array
np.where(condition, x, y) 三元运算符,x if condition else y
arr1 = np.random.randn(2, 3)
print(arr1)
print(np.abs(arr1))
print(np.ceil(arr1))
print(np.floor(arr1))
print(np.rint(arr1))
print(np.isnan(arr1))
print(np.multiply(arr1, 2))
print(np.divide(arr1, arr1))
print(np.where(arr1 > 0, 1, 0))
2.7.2 统计函数
函数 说明
np.mean() 所有元素的平均值
np.sum() 所有元素的和
np.max() 所有元素的最大值
np.min() 所有元素的最小值
np.std() 所有元素的标准差
np.var() 所有元素的方差
np.argmax() 最大值的下标索引值
np.argmin() 最小值的下标索引值
np.cumsum() 返回一个一维数组,每个元素都是之前所有元素的累加和
np.cumprod() 返回一个一维数组,每个元素都是之前所有元素的累乘积
多维数组在计算时默认计算全部维度,可以使用axis参数指定按某一维度为轴心统计,axis=0按列统计、axis=1按行统计。
arr1 = np.random.randint(1, 5, (2, 3))
print(arr1)
print(np.mean(arr1))
print(np.sum(arr1))
print(np.max(arr1))
print(np.min(arr1))
print(np.std(arr1))
print(np.var(arr1))
print(np.argmax(arr1))
print(np.argmin(arr1))
print(np.cumsum(arr1))
print(np.cumprod(arr1))
print(np.cumprod(arr1, axis=1))
2.7.3 比较函数
函数 说明
np.any() 至少有一个元素满足指定条件,就返回True
np.all() 所有的元素都满足指定条件,才返回True
arr1 = np.array([1, 2, 3, 4, 5])
print(np.any(arr1 > 3))
print(np.all(arr1 > 3))
2.7.4 排序函数
ndarray.sort():就地排序(直接修改原数组)。
arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
arr1.sort()
print(arr1)
arr1.sort(axis=0)
print(arr1)
axis:指定排序的轴。默认值为 -1,表示沿着最后一个轴进行排序。在二维数组中,axis = 0 表示按列排序,axis = 1 表示按行排序。
在 NumPy 中,轴是对数组维度的一种抽象描述。对于多维数组,每个维度都对应一个轴,轴的编号从 0 开始。对于二维数组,它有两个轴:
轴 0:代表垂直方向,也就是行的方向。可以把二维数组想象成一个表格,轴 0 就像是表格中从上到下的行索引方向对列数据排序,所以axis=0表示按列排序。
轴 1:代表水平方向,也就是列的方向。就像是表格中从左到右的列索引方向对行数据进行排序,所以axis=1表示按行排序。
np.sort():返回排序后的副本(创建新的数组)。
arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
print(np.sort(arr1))
2.7.5 去重函数
np.unique():计算唯一值并返回有序结果。
arr1 = np.random.randint(0, 5, (3, 3))
print(arr1)
print(np.unique(arr1))
2.8 基本运算
numpy中的数组不用编写循环即可执行批量运算,称之为矢量化运算。
大小相等的数组之间的任何算术运算都会将运算应用到元素级。
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
print(arr1 + arr2)
print(arr1 - arr2)
print(arr1 * arr2)
print(arr1 / arr2)
数组与标量的算术运算会将标量值传播到各个元素,不同大小的数组之间的运算叫做广播。
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1 + 100)
print(arr1 - 100)
print(arr1 * 100)
print(arr1 / 100)
广播机制是 NumPy 中一个强大的特性,它允许在不同形状的数组之间进行元素级运算。广播机制的规则如下:
规则1:如果俩个数组的维度数不相同,那么小维度数组的形状将会在最左边补1。
import numpy as np
一维数组
arr1 = np.array([1, 2, 3]) # 形状为 (3,)
二维数组
arr2 = np.array([[4], [5], [6]]) # 形状为 (3, 1)
对 arr1 应用规则 1,在其形状最左边补 1,变为 (1, 3) [[1,2,3]]
此时 arr1 形状 (1, 3) 和 arr2 形状 (3, 1) 满足广播条件
result = arr1 + arr2
print(“规则 1 示例结果:\n”, result)
规则2:如果俩个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度大小(元素个数)为1的维度开始扩展 ,(维度必须是1开始)直到所有维度都一样, 以匹配另一个数组的形状。
import numpy as np
二维数组
arr3 = np.array([[1, 2, 3]]) # 形状为 (1, 3)
二维数组
arr4 = np.array([[4], [5], [6]]) # 形状为 (3, 1)
arr3 沿着第0个维度扩展,将原有的一行数据复制成3行,为 (3, 3)=>[[1,2,3], [1,2,3], [1,2,3]]
arr4 沿着第1个维度扩展, (3, 3)=>[[4,4,4], [5,5,5], [6,6,6]]
result = arr3 + arr4
print(“规则 2 示例结果:\n”, result)
规则3:如果俩个数组的形状在任何一个维度上都不匹配,并且没有任何一个维度大小等于1,那么会引发异常。
import numpy as np
一维数组
arr5 = np.array([1, 2, 3]) # 形状为 (3,)
一维数组
arr6 = np.array([4, 5]) # 形状为 (2,)
try:
result = arr5 + arr6
print(result)
except ValueError as e:
print(f"规则 3 示例错误信息:{e}")
2.9 矩阵乘法
通过*运算符和np.multiply()对两个数组相乘进行的是对位乘法而非矩阵乘法运算。
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[6, 5, 4], [3, 2, 1]])
print(arr1 * arr2)
print(np.multiply(arr1, arr2))
使用np.dot()、ndarray.dot()、@可以进行矩阵乘法运算。
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[6, 5], [4, 3], [2, 1]])
#对于矩阵乘法来说,要求第一个矩阵的列数等于第二个矩阵的行数
print(arr1)
print(arr2)
print(arr1.shape, arr2.shape)
print(np.dot(arr1, arr2))
print(arr1.dot(arr2))
print(arr1 @ arr2)
一个二维数组跟一个大小合适的一维数组的矩阵点积运算之后将会得到一个一维数组
arr3 = np.array([6, 5, 4])
print(arr1 @ arr3)
矩阵乘法的规则是:结果矩阵中第 i 行第 j 列的元素等于第一个矩阵的第 i 行与第二个矩阵的第 j 列对应元素乘积之和。
结果矩阵第一行第一列的元素:
计算 arr1 的第一行 [1, 2, 3] 与 arr2 的第一列 [6, 4, 2] 对应元素乘积之和,即 16 + 24 + 32 = 6 + 8 + 6 = 20。
结果矩阵第一行第二列的元素:
计算 arr1 的第一行 [1, 2, 3] 与 arr2 的第二列 [5, 3, 1] 对应元素乘积之和,即 15 + 23 + 31 = 5 + 6 + 3 = 14。
结果矩阵第二行第一列的元素:
计算 arr1 的第二行 [4, 5, 6] 与 arr2 的第一列 [6, 4, 2] 对应元素乘积之和,即 46 + 54 + 62 = 24 + 20 + 12 = 56。
结果矩阵第二行第二列的元素:
计算 arr1 的第二行 [4, 5, 6] 与 arr2 的第二列 [5, 3, 1] 对应元素乘积之和,即 45 + 53 + 61 = 20 + 15 + 6 = 41。
所以,手动计算得到的结果矩阵是 [[20, 14], [56, 41]]
相关文章:
AI大模型从0到1记录学习numpy pandas day24
第 1 章 环境搭建 1.1 Anaconda 1.1.1 什么是Anaconda Anaconda官网地址:https://www.anaconda.com/ 简单来说,Anaconda Python 包和环境管理器(Conda) 常用库 集成工具。它适合那些需要快速搭建数据科学或机器学习开发环境的用…...
开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、开篇:AI芯片架构演变的三重挑战 (引述TPUv4采用RISC-V的行业案…...
VirtualiSurg使用SenseGlove触觉手套开发XR手术培训体验
虚拟现实和虚拟现实触觉 作为一个领先的培训平台,VirtualiSurg自2017年以来一直利用扩展现实(XR)和触觉技术,为全球医疗保健行业提供个性化的数据驱动学习解决方案。它们使医疗专业人员能够协作学习和培训,提高他们的技能,让他们…...
AbstractErrorController简介-笔记
1. AbstractErrorController简介 org.springframework.boot.autoconfigure.web.servlet.error.AbstractErrorController 是 Spring Boot 提供的一个用于处理 HTTP 错误(如 404、500 等)的抽象类,用于自定义错误响应的逻辑。它是 Spring Boot…...
next.js实现项目搭建
一、创建 Next.js 项目的步骤 1、安装 npx create-next-applatest # 或 yarn create next-app # 或 pnpm create next-app 按照交互式提示配置你的项目: 输入项目名称 选择是否使用 TypeScript 选择是否启用 ESLint 选择是否启用 Tailwind CSS 选择是否使用 s…...
使用GoLang版MySQLDiff对比表结构
概述 下载地址: https://github.com/camry/mysqldiff/ 编译安装 git clone https://github.com/camry/mysqldiff.git go env -w GOPROXYhttps://goproxy.cn,direct go env -w GOPRIVATE*.corp.example.com go build .\mysqldiff.go执行对比 ./mysqldiff --sourc…...
git工具使用详细教程-------命令行和图形化工具
下载 git下载地址:https://git-scm.com/downloads TortoiseGit(图形化工具)下载地址:https://tortoisegit.org/download/ 认识git结构 工作区:存放代码的地方 暂存区:临时存储,将工作区的代码…...
失控的产品
大部分程序员很难有机会做一个新的产品,绝大多时候去一家新公司也都是在旧产品上修修补补。 笔者还是很幸运得到了开发新品的机会,从2023年开始做,中间经历了许多磕磕碰碰。 有的小伙伴从中离开,偶尔又加入1~2个人,但…...
区块链blog1__合作与信任
🍂我们的世界 🌿不是孤立的,而是网络化的 如果是单独孤立的系统,无需共识,而我们的社会是网络结构,即结点间不是孤立的 🌿网络化的原因 而目前并未发现这样的理想孤立系统,即现实中…...
ES常识9:如何实现同义词映射(搜索)
在 Elasticsearch(ES)中实现同义词映射(如“美丽”和“漂亮”),核心是通过 同义词过滤器(Synonym Token Filter) 在分词阶段将同义词扩展或替换为统一词项,从而让搜索时输入任意一个…...
aws 实践创建policy + Role
今天Cyber 通过image 来创建EC2 的时候,要添加policy, 虽然是administrator 的role, 参考Cyber 提供的link: Imageshttps://docs.cyberark.com/pam-self-hosted/14.2/en/content/pas%20cloud/images.htm#Bring 1 Step1:...
兰亭妙微B端UI设计:融合多元风格,点亮品牌魅力
在B端产品市场,独特的品牌形象是企业脱颖而出的关键。兰亭妙微专注于B端UI设计,通过融合多元风格,为企业点亮品牌魅力,助力品牌价值提升。 兰亭妙微主创团队源自清华,历经多年沉淀,积累了丰富的设计经验。…...
高项-逻辑数据模型
逻辑数据模型的核心理解 1. 定义与特点 逻辑数据模型(Logical Data Model, LDM): 是一种抽象的数据结构设计,用于描述业务实体(如客户、订单)及其关系(如“客户下单”),…...
Aquatone安装与使用
前言:aquatone工具获取网页截图,在资产收集的时候,对于网站可以起到快速浏览 michenriksen/aquatone: A Tool for Domain Flyovershttps://github.com/michenriksen/aquatone 任务一 安装chromium sudo apt install chromiumchromium -h 任务二 下载aquatone Relea…...
解读RTOS 第八篇 · 内核源码解读:以 FreeRTOS 为例
1. 引言 FreeRTOS 作为最流行的嵌入式实时操作系统之一,其内核源码简洁且功能完善。通过剖析其关键模块(任务管理、调度器、队列、内存管理和移植层),不仅能够更深入地理解 RTOS 的运行机制,还能掌握根据项目需求进行内核定制与优化的能力。本章将带你以 FreeRTOS 10.x 版…...
6、登录功能后端开发
6、登录功能后端开发 https://xiaoxueblog.com/ai/%E7%99%BB%E5%BD%95%E5%8A%9F%E8%83%BD%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91.html 1、新建用户表SQL脚本 -- CREATE DATABASE aicloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 创建用户表 drop table if exi…...
「彻底卸载 Quay 容器仓库」:干净移除服务、镜像与配置的全流程指南
文章目录 🧹 第一步:停止并禁用 systemd 服务🚮 第二步:移除 Podman 容器与相关资源1. 删除 quay-app 容器2. 删除镜像(如果你想彻底清理)3. 删除挂载卷(比如 SQLite 存储) …...
C++从入门到实战(十五)String(上)介绍STL与String的关系,为什么有string类,String有什么用
C从入门到实战(十五)String(上) 前言一、STL与String的关系1. STL 是什么?2. String 是什么?3. String 与 STL 的关系 二、为什么有string类,有什么用1. 为什么需要 string 类?2. st…...
【Python 正则表达式】
Python 正则表达式通过 re 模块实现模式匹配,是文本处理的核心工具。以下是系统化指南,包含语法详解和实战案例: 一、正则基础语法 1. 元字符速查表 符号含义示例匹配结果.任意字符(除换行符)r"a.c"“abc”…...
【MySQL】第四弹——表的CRUD进阶(二)数据库设计
文章目录 🌟范式🌟表的设计💫第一范式 1NF🪐反例🪐正例 💫第二范式 2NF🪐反例🪐正例 💫第三范式 3NF🪐反例🪐正例 💫表的设计方法&…...
Unity基础学习(十五)核心系统——音效系统
目录 一、关于音频文件的导入相关 二、音频源组件Audio Source 三、Audio Listener的介绍 四、关于播放音乐的方式 五、麦克风输入相关 Microphone 类方法与属性总览 1. Start 方法 2. End 方法 3. IsRecording 方法 4. GetPosition 方法 5. devic…...
计算机视觉----常见卷积汇总
普通卷积 普通卷积大家应该都比较熟悉了,如果不熟悉的话,可以参考我之前的博客,或者去网上自行百度。这里主要想补充两个知识点。一:卷积核参数量怎么算? 二:如何高效的并行运算卷积滑窗? …...
【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!
Echarts官网:https://echarts.apache.org/zh/index.html ECharts 是一个由百度团队开发的、基于 JavaScript 的开源可视化图表库,它提供了丰富的图表类型和强大的交互功能,能够帮助开发者轻松创建专业级的数据可视化应用。 核心特点 丰富的图…...
【专栏启动】开篇:为什么是 Django + Vue3?测试平台的技术选型与架构蓝图
【专栏启动】开篇:为什么是 Django Vue3?测试平台的技术选型与架构蓝图 前言一、为什么是 Django Vue3?二、测试平台的架构设计蓝图三、测试平台模块功能概述 结语 前言 一个高效、稳定、易用的测试平台,不仅能够帮助团队提升测…...
Rust 学习笔记:关于 Vector 的练习题
Rust 学习笔记:关于 Vector 的练习题 Rust 学习笔记:关于 Vector 的练习题哪个调用会报错?以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是?以下代码…...
Modbus TCP转Profinet网关:数字化工厂异构网络融合的核心枢纽
在现代工业生产中,随着智能制造和工业互联网的不断发展,数字化工厂成为了制造业升级的重要方向。数字化工厂的核心在于实现设备、数据和人的互联互通,而这其中,通信协议扮演着至关重要的角色。今天,我们就来探讨开疆智…...
精益数据分析(62/126):从客户访谈评分到市场规模估算——移情阶段的实战进阶
精益数据分析(62/126):从客户访谈评分到市场规模估算——移情阶段的实战进阶 在创业的移情阶段,科学评估用户需求与市场潜力是决定产品方向的关键。今天,我们结合Cloud9 IDE的实战经验与《精益数据分析》的方法论&…...
各类开发教程资料推荐,Java / python /golang /js等
更多资源在文末👇👇👇👇👇👇👇👇👇 1. 入门首选(易学且应用广) Python 特点:语法简洁、易读,社区资源丰富。 用途&#…...
现代健康养生小贴士
在忙碌的现代生活中,掌握一些简单实用的健康养生技巧,能轻松为身体 “充电”,提升生活质量。以下从饮食、运动、作息等方面,为你带来科学易执行的养生建议。 一、饮食:吃对食物,为健康加分 早餐要吃好&am…...
每日一道leetcode(新学数据结构版)
208. 实现 Trie (前缀树) - 力扣(LeetCode) 题目 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动…...
ChromaDB 向量库优化技巧实战
chroma 一步步使用 安装 # 安装chromadb pip install chromadb,sentence_transformers# 不启动服务会出现sock.connect(sa)TimeoutError: timed out chroma run服务启动后,您将看到类似以下输出: 建立连接 部署完成后,需要建立与Chroma服…...
全国各地区经纬度数据(包含省、市、县)
全国各地区经纬度数据(包含省、市、县) 1、指标:行政区划代码、省份、城市、经度、纬度 2、来源:高德地图 3、用途:可用于空间相关研究 4、下载链接: 全国各地区经纬度数据(包含省、市、县…...
记录一下seata后端数据库由mariadb10切换到mysql8遇到的SQLException问题
文章目录 前言一、问题记录二、参考帖子三、记录store.db.driverClassName 前言 记录一下seata后端数据库由mariadb10切换到mysql8遇到的SQLException问题。 一、问题记录 17:39:23.709 ERROR --- [ionPool-Create-1134013833] com.alibaba.druid.pool.DruidDataSource : …...
【Python 面向对象】
Python 的面向对象编程(OOP)通过类(Class)和对象(Object)实现代码结构化,支持封装、继承和多态三大特性。以下是系统化指南: 一、类与对象基础 1. 定义类 class Dog:# 类属性&…...
软考软件评测师——计算机组成与体系结构
目录 计算机寻址方式详解与对比分析 一、立即寻址 二、直接寻址 三、间接寻址 四、寄存器寻址 五、寄存器间接寻址 六、变址寻址 七、基址寻址 八、相对寻址 九、综合对比分析 计算机寻址方式详解与对比分析 一、立即寻址 核心概念 指令操作码后直接携带操作数值&a…...
宝元LNC数控数据采集方式、跨平台采集通讯方案介绍
文章目录 采集效果图通讯方案介绍技术名词解释技术细节小结 采集效果图 通讯方案介绍 老版本宝元:必须走TCP通讯,如LNC568A系列 今天主要介绍新版本的宝元,如采用M6800控制器的5800系列系统等 新版本宝元通讯方式: ①sdk通讯&…...
ZFile与Cpolar技术结合实现远程数据实时访问与集中管理的可行性分析
文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在信息爆炸的年代,每个现代人都在数字浪潮中扮演着独特的角色。不论是商务精英、影像创作者还是学术达人&…...
JS手写代码篇---手写 Object.create
JS手写代码篇 在做手写题的时候,我们要思考两个问题 这个代码的作用是什么能够实现的效果是什么样子 1. 手写 Object.create 思路:创造一个对象,类似于Object.create()方法>将obj作为原型 // 手写 Object.create function create (ob…...
homeassistant安装
这里写自定义目录标题 homeassistant安装(windows)安装virtual boxhaos下载haos安装docker镜像地址更换安装File editor安装hacs安装Xiaomi Miot Auto问题排查 homeassistant安装(windows) 安装virtual box 百度搜索virtual box…...
Pythonnet - 实现.NET Core和Python进行混合编程
1 安装Pythonnet包 2...
C++23 新特性:ranges::contains 与 ranges::contains_subrange
文章目录 ranges::containsranges::contains_subrange编译器支持总结 C23 标准带来了许多令人兴奋的新特性,其中就包括了 ranges::contains 和 ranges::contains_subrange 这两个算法。这两个算法由提案 P2302R4 提出,它们为 C 程序员提供了更加丰富和…...
(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)
目录 前言: 源代码: product.h product.c fileio.h fileio.c main.c 代码解析: 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…...
Framebuffer显示bmp图片
代码: /* 标准输入输出头文件,提供文件操作和输入输出函数(如printf)*/ #include <stdio.h>/* 文件控制操作头文件,提供文件打开模式(如O_RDWR)和文件控制函数 */ #include <fcntl.h&…...
常用负载均衡技术有哪些?不同网络层面上的网络负载均衡技术
前言 负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或I/O任务,从而以较低成本消除网络瓶颈,提高网络的灵活性和可靠性。 在系统管理员发现网络性能不好时,可以通过网络负载均衡来分配资源,以…...
由于复制槽导致wal大量堆积的处理方案
文章目录 环境症状问题原因解决方案 环境 系统平台:N/A 版本:N/A 症状 数据库中的pg_wal占用大量空间,且不删除。 问题原因 复制槽占用早期的wal日志,导致wal归档后无法正常删除。 1. 排查复制槽情况: highgo# …...
用FileCodeBox打造私有文件传输:Ubuntu环境保姆级部署教程!
文章目录 前言1.Docker部署2.简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在数字化浪潮席卷全球的当下,文件传输已成为现代职场的高频需求。当谈及资料交换场景时,许多用户往往抱怨传统工具存在界面复杂、功能卡顿、广告…...
从卡顿到丝滑:JavaScript性能优化实战秘籍
引言 在当今的 Web 开发领域,JavaScript 作为前端开发的核心语言,其性能表现对网页的加载速度、交互响应以及用户体验有着举足轻重的影响。随着 Web 应用的复杂度不断攀升,功能日益丰富,用户对于网页性能的期望也越来越高。从电商…...
win11平台下的docker-desktop中的volume位置问题
因为需要搞个本地的mysql数据库,而且本地安装的程序较多,不想再安mysql了,就想到使用docker来安装。而且因为数据巨大,所以想到直接使用转移data文件夹的方式。 各种查询,而且还使用ai查询,他们都提到&…...
掌握Multi-Agent实践(七):基于AgentScope分布式模式实现多智能体高效协作[并行加速大模型辅助搜索、分布式多用户协同辩论赛]
之前的案例都是运行在单台机器上以单进程形式运行,受限于 Python 的全局解释器锁,实际只能有效利用一个 CPU 的计算资源,并且无法支持多个用户从自己的电脑上接入同一个 Multi-Agent 应用进行交互。为了提高运行效率并支持多用户接入同一个应用中,AgentScope 提供了分布式…...
2023CCPC河南省赛暨河南邀请赛个人补题ABEFGHK
Dashboard - 2023 CCPC Henan Provincial Collegiate Programming Contest - Codeforces 过题难度:A H F G B K E 铜奖: 2 339 银奖: 3 318 金奖: 5 523 A: 直接模拟 // Code Start Here int t;cin >> t;while(t-…...