本文主要是介绍AI学习前瞻-numpy语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
numpy语法
- python概念
- python基础语法学习
- numpy语法学习
- array函数
- arange函数
- random函数
- ndarrray函数
- 其他创建方式
- linspace函数
- 切片和索引
- 改变矩阵维度
- 矩阵拼接
- 矩阵分隔
- 矩阵转置
- 算术函数
- 数学函数
- 聚合函数
python概念
python是强类型的动态的脚本语言。
强类型:不同类型之间不能进行逻辑运算、转换。python有9种数据类型。不同数据类型不能进行转换、加减等。
50+"python" 会报TypeError
动态:变量不需要显示声明类型,变量可以在运行时根据需要自动更改其类型。
pythonVar = 1; //变量为Integer类型
pythonVar = "python" //修改变量类型为字符串
//上述代码能正常执行
脚本:代码运行过程中不需要编译器进行编译,只需要解释器进行解释执行。
上述逻辑推断: java是强类型的静态的非脚本语言。
python基础语法学习
python的语言简单学习推荐:python基础教程-菜鸟教程
建议读者的学习路线:有过一门语言基础的可以先跳过,因为语法和java语言显示(盲猜测和其他语言类似)基于后面的学习遇到不懂的再去查阅资料。本篇博文只针对与AI相关的python库进行学习使用。
numpy语法学习
NumPy是高性能科学计算和数据分析的基础包,也是我们在使用AI进行数据处理和分析的重要模块。下面我们一起来学习其用法。
大部分文档将ndarray解读为数组,笔者认为不太恰当,此处笔者将数组解读为矩阵(数学专业出身)
#创建py文件
#引入numpy的包
import numpy as np#可能会报错 提示没有对应的numpy的库,所以需要安装
conda install numpy
#或者
pio install numpy
有关python模块安装部分, 请参考博主的上一篇博文ai学习前瞻-python环境搭建
array函数
numpy.array(object,dtype=None,copy=true,subok=false,ndmin=0)
属性/参数 | 描述 |
---|---|
object | 矩阵或嵌套的数列 |
dtype | 矩阵元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建矩阵的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的矩阵 |
ndmin | 指定生产矩阵的最小维度 |
# 创建一个一维矩阵
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print("一维矩阵的类型:" + str(type(a)))
print("shap属性获取每一维度的元素个数:" + str(a.shape))
print("shap属性获取第一维矩阵个数:" + str(a.shape[0]))# 创建一个二维矩阵
# 1.列表套列表创建二维矩阵
a = np.array([[1,2,3,4],[5,6,7,8]])
#2.元组套元组创建二维矩阵
a = np.array(((1,2,3,4),(5,6,7,8)))
print("二维矩阵的类型:" + str(type(a)))
print("shap属性获取每一维度的元素个数:" + str(a.shape))
print("shap属性获取第二维矩阵个数:" + str(a.shape[1]))
print("访问矩阵:" + str(a[1][1]))#将列表转换为一个3维矩阵,且将类型从Int转换为float
a= np.array([1,2,3,4,5],ndmin=3,dtype=float)
array([[[1., 2., 3., 4., 5.]]])
arange函数
numpy.arange(start,stop,step,dtype)
属性/参数 | 描述 |
---|---|
start | 矩阵起始值 |
stop | 矩阵结束值 |
step | 步长 |
type | 矩阵的类型 |
# 创建一个一维矩阵 开始值是1 步长2 最大值不超过10,类型为float
np.arange(1,10,2,float)#array使用arange生产二维矩阵
np.array([np.arange(1,5),np.arange(1,5),np.arange(1,5)])
random函数
#生成一个大小是10的一维矩阵 矩阵范围为0-1的随机数
np.random.random(10)#生成一个2行3列的二维矩阵 矩阵范围为0-1的随机数
np.random.random(size=(2,3))#生成一个大小是10的一维矩阵 矩阵范围为0-5的随机整数
np.random.randint(5,size=10)#生成一个大小是10的一维矩阵 矩阵范围为5-10的随机整数
np.random.randint(5,10,size=10)#生成一个2行3列的二维矩阵 矩阵范围为5-10的随机数
np.random.randint(5,10,size=(2,3))#生成一个2行3列的维维矩阵 矩阵范围为标准正态分布
np.random.randn(2,3)
#生成2个3行4列的维维矩阵 矩阵范围为标准正态分布
np.random.randn(2,3,4)# 使用正态分布生成一个期望是3 方差为4的大小是10的一维矩阵
np.random.normal(loc=3,sacle=4,size=10)
# 使用正态分布生成一个期望是3 方差为4的大小是2行3列的二维矩阵
np.random.normal(loc=3,sacle=4,size=(2,3))
ndarrray函数
待补充
其他创建方式
#zeros(所有矩阵元素为0)
#创建一个一维矩阵 size=3
np.zeros(3)
##创建一个3行4列全是0的矩阵
np.zeros((3,4))#ones(所有矩阵元素为1)
#创建一个一维矩阵 size=3
np.ones(3)
##创建一个3行4列全是1的矩阵
np.ones((3,4))#empty(所有矩阵元素为空 分配一块回收的空间,该空间可能有上一个操作的数据)
#创建一个一维矩阵 size=3
np.empty(3)
##创建一个3行4列全空的矩阵
np.zeros((3,4))#创建一个像某个矩阵行列一样的矩阵
np.empty_like()
np.zeros_like()
np.ones_like()
linspace函数
创建一个等差数列构成的一维矩阵
numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=none)
属性/参数 | 描述 |
---|---|
start | 矩阵起始值 |
stop | 矩阵结束值 |
Num | 生成等步长样本的数量。默认样本长度50 |
endpoint | 是否包含结束值,true包含,默认 true |
dtype | 数据类型 |
retstep | 是否显示等差值 true显示 |
#生成一个开始值1,结束值为30(不包含)数量为50的等差数列
np.linspace(1,30,50,False,True)
切片和索引
#创建一个 长度12的一维矩阵
arr = np.arange(12)#reshape 重洗冲另外维度的矩阵
#重塑为3行4列 3*4=12
arr = np.reshape(3,4)
arr = np.reshape(2,6)
# 3*3 != 12 则下述代码会报错
arr = np.reshape(3,3)arr = np.arange(12).reshape(3,4)
# 从3行4列元素中获取 [1-3)行 [1-4)列的元素2行3列的矩阵。
temp = arr[1:3,1:4]
# 从2行3列中获取1行2列的矩阵,copy会复制一份新的矩阵,修改不会影响原来
np.copy(temp[0:1,0:2]) 《=》 np.copy(temp[:1,:2])
改变矩阵维度
#reshape 将低维度从高维度变为低维度,也可以将低维度变为高维度
np.arange(36).reshape(6,6).reshape(2,3,6).reshape(6,6)#ravel、flatten将多维矩阵变为一维矩阵
arr = np.arange(36).reshape(2,3,6)
arr.ravel()
arr.flatten()
矩阵拼接
#2行4列
a = np.array([[1,2,3,4],[1,2,3,4]])
#2行4列
b = np.array([['a','b','c','d'],['a','b','c','d']])
#水平方向拼接 x轴拼接 -> 4行4列 x轴拼接时 列数需要匹配
print(np.vstack([a,b]))
#等价于
np.concatenate((a,b),0)
#垂直方向拼接 y轴拼接 -> 2行8列 y轴拼接时 行数需要匹配
np.hstack([a,b])
#等价于
np.concatenate((a,b),0))#多维度矩阵拼接 需要使用concatenate
a = np.arange(36).reshape(2,3,6)
b = np.arange(36).reshape(2,3,6)
#a和b都是2个3行6列的三维矩阵#按照第一个维度拼接 4个3行6列的三维矩阵
np.concatenate((a,b),0))
#按照第一个维度拼接 2个6行6列的三维矩阵
np.concatenate((a,b),1))
#按照第一个维度拼接 2个3行12列的三维矩阵
np.concatenate((a,b),2))
矩阵分隔
numpy.split(arr,indices_or_sections,axios)
属性/参数 | 描述 |
---|---|
Arr | 要分隔的矩阵 |
indices_or_sections | 矩阵:指定分割点的索引位置 整数:将矩阵平均分割的段数 |
Num | 生成等步长样本的数量。默认样本长度50 |
endpoint | 是否包含结束值,true包含,默认 true |
dtype | 数据类型 |
retstep | 是否显示等差值 true显示 |
#4行3列的二维矩阵
a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
# 将二维矩阵 按照行平均分隔为2份。
np.split(a,2,0)
#等价于
np.vsplit(a,2)
# 3的话无法按行平均分配 所以会报错
np.split(a,3,0)# 将二维矩阵 按照列平均分隔为2份。
np.split(a,3,1)
#等价于
np.hsplit(a,3)
# 3的话无法按列平均分配 所以会报错
np.split(a,2,0)
矩阵转置
将矩阵的行列互换得到的新矩阵称为转置矩阵。
#创建一个2行3列的二维矩阵
arr = np.array([[1, 2, 3], [4, 5, 6]])
#矩阵转置变为3行两列 [[1,4], [2, 5],[3,6]]
print(arr.transpose())
print(np.transpose(arr))
算术函数
NumPy 数组的“加减乘除”算术运算,分别对应 add()、subtract()、multiple() 以及 divide() 函数。
注意:做算术运算时,矩阵必须具有相同的形状,或者符合数组的广播机制,才可以执行运算。
当运算中两个数组的形状不同使时,numpy将会自动触发广播机制
函数 | 简写 | 描述 |
---|---|---|
np.add(a, b) | a+b | 加 |
np.subtract(a, b) | a-b | 减 |
np.mutiply(a, b) | a*b | 乘 |
np.divide(a, b) | a/b | 除 |
np.power(a, b) | a^b | 将a中的元素作为底数,计算a与b中相应元素的幂 |
np.mod(a,b) | a%b | 计算输入数组中相应元素的相除后的余数 |
数学函数
NumPy提供了一系列的数学三角函数,这些函数都是以numpy库中的子模块形式提供的。
函数 | 描述 |
---|---|
numpy.sin(x) | 计算x的正弦值 |
numpy.cos(x) | 计算x的余弦值 |
numpy.tan(x): | 计算x的正切值。 |
numpy.degrees(x): | 将弧度转换为角度。 |
numpy.radians(x): | 将角度转换为弧度 |
numpy.deg2rad(x): | 将角度转换为弧度 |
numpy.rad2deg(x) | 将弧度转换为角度 |
聚合函数
函数 | 描述 |
---|---|
np.amin() | 计算数组中的元素沿指定轴的最小值 |
np.amax() | 计算数组中的元素沿指定轴的最大值 |
np.ptp() | 计算数组中元素沿指定轴最大值与最小值的差(最大值 - 最小值) |
np.mean() | 计算数组中元素沿指定轴的算术平均值 |
np.average() | 计算数组中元素沿指定轴的平均值,可以指定权重数组计算加权平均值 |
np.std() | 计算标准差 |
np.var() | 计算方差 |
这篇关于AI学习前瞻-numpy语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!