Python常用库之一:Numpy
Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库!
Numpy比Python列表更具优势,其中一个优势便是速度。在对大型数组执行操作时,Numpy的速度比Python列表的速度快了好几百。因为Numpy数组本身能节省内存,并且Numpy在执行算术、统计和线性代数运算时采用了优化算法。
Numpy的另一个强大功能是具有可以表示向量和矩阵的多维数组数据结构。Numpy对矩阵运算进行了优化,使我们能够高效地执行线性代数运算,使其非常适合解决机器学习问题。
与Python列表相比,Numpy具有的另一个强大优势是具有大量优化的内置数学函数。这些函数使你能够非常快速地进行各种复杂的数学计算,并且用到很少代码(无需使用复杂的循环),使程序更容易读懂和理解。
注:在ndarray结构中,里面元素必须是同一类型的,如果不是,会自动的向下进行。
Numpy简单创建数组
a = [1, 2, 3]
b = np.array(a)
c = np.array([[0, 1, 2, 10],
[12, 13, 100, 101],
[102, 110, 112, 113]], int)
print(c)
print(b)
创建数值为1的数组
Numpy.ones(参数 1:shape,数组的形状;参数 2:dtype, 数值类型)
array_one = np.ones([10, 10], dtype=np.int)
print(array_one)
创建数值为0的数组
Numpy.zeros(参数 1:shape,数组的形状;参数 2:dtype, 数值类型)
array_zero = np.zeros([10, 9], dtype=np.float)
print(array_zero)
创建指定数值的数组
Numpy.full(参数 1:shape,数组的形状; 参数 2:constant value,数组填充的常数值;参数 3:dtype, 数值类型)
array_full = np.full((2, 3), 5)
print(array_full)
创建单位矩阵
Numpy.eye(参数 1:N,方阵的维度)
array_eye = np.eye(5)
print(array_eye)
创建对角矩阵
Numpy.diag(参数1:v,主对角线数值,参数 2:k,对角线元素):K = 0表示主对角线,k>0的值选择在主对角线之上的对角线中的元素,k<0的值选择在主对角线之下的对角线中的元素
array_diag = np.diag([10, 20, 30, 40])
print(array_diag)
Numpy查看数组属性
数组元素个数:b.size 或 np.size()
数组形状:b.shape 或 np.shape()
数组维度:b.ndim
数组元素类型:b.dtype
# 数组元素个数:3
print(b.size)
# 数组形状:(3,)
print(b.shape)
# 数组维度:1
print(b.ndim)
# 数组元素类型:int32
print(b.dtype)
矩阵第一维的长度:shape[0] # 行
矩阵第二维的长度:shape[1] # 列
.......
array_rand = np.random.rand(10, 10, 4)
print(array_rand)
print(array_rand.ndim)
print(array_rand.shape[0])
print(array_rand.shape[1])
print(array_rand.shape[2])
Numpy创建随机数组(np.random)
均匀分布
创建指定形状的数组,数值范围在0~1之间
array_rand = np.random.rand(10, 10, 4)
print(array_rand)
print(array_rand.ndim)
创建指定范围内的一个数:Numpy.random.uniform(low, high, size=None)
array_uniform = np.random.uniform(0, 100, size=5)
print(array_uniform)
创建指定范围的一个整数:Numpy.random.randint(low, high, size=None)
array_int = np.random.randint(0, 100, size=3)
print(array_int)
print(array_int.size)
Numpy.arange()和Numpy.linspace()函数也可以均匀分布
Numpy.arange(start, stop, step):创建一个秩为1的array,其中包含位于半开区间[start, stop)内并均匀分布的值,step表示两个相邻值之间的差。
Numpy.linspace(start, stop, N):创建N个在闭区间[start, stop]内均匀分布的值。
X = np.arange(1, 5, 2, dtype=np.int)
print(X)
y = np.linspace(1, 5, 3)
print(y)
正态分布
创建给定均值、标准差、维度的正态分布:Numpy.random.normal(loc, scale, size)
# 正态生成4行5列的二位数组
array_normal = np.random.normal(loc=1.75, scale=0.1, size=[4, 5])
print(array_normal)
print(array_normal.ndim)
Numpy数组操作
数组的索引
array[start : end]
array[start:]
array[:end]
布尔型索引:array[array>10 & array<20]
# 截取第0至第3行,第2至第4列(从第0行第0列算起)
after_array = array_normal[:3, 2:4]
print(after_array)
数组的复制
Numpy.copy(参数 1:数组):创建给定array的一个副本,还可当做方法用。
after_array = array_normal[:3, 2:4].copy()
copy_array = np.copy(array_normal[:, 2:4])
数组排序
Numpy.sort(参数 1:a,数组;参数 2:axis=0/1,0表示行1表示列):np.sort()作为函数使用时,不更改被排序的原始array;array.sort()作为方法使用时,会对原始array修改为排序后数组array
# 整体排序
np.sort(array_normal)
# 仅行排序
np.sort(array_normal, axis=0)
# 仅列排序
np.sort(array_normal, axis=1)
数组唯一元素
Numpy.unique(参数 1:a,数组;参数 2:return_index=True/False,新列表元素在旧列表中的位置;参数 3:return_inverse=True/False,旧列表元素在新列表中的位置;参数 4:return_counts,元素的数量;参数 5:axis=0/1,0表示行1表示列):查找array中的唯一元素。
print("提取唯一元素", np.unique(array_normal))
print("提取唯一元素", np.unique(array_normal, return_index=True))
print("提取唯一元素", np.unique(array_normal, return_counts=True))
print("提取唯一元素", np.unique(array_normal, return_index=True, return_inverse=True, axis=0))
数组的改变
数组转置
array_normal.T
reshape():把指定的数组改变形状,但是元素个数不变;有返回值,即不对原始多维数组进行修改
c = np.array([[[0, 1, 2],
[10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
"""
[[[ 0 1]
[ 2 10]] [[ 12 13]
[100 101]] [[102 110]
[112 113]]]
"""
print(c.reshape(3, 2, 2))
"""
[[ 0 1 2 10]
[ 12 13 100 101]
[102 110 112 113]]
"""
# 某一维指定为-1时,自动计算维度
print(c.reshape(3, -1))
"""[[[ 0 1]
[ 2 10]
[ 12 13]] [[100 101]
[102 110]
[112 113]]]"""
print(c.reshape(2, -1, 2))
resize():把指定的数组改变形状,但是元素个数可变,不足补0;无返回值,即对原始多维数组进行修改
a = np.array([[[0, 1, 2],
[10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
b = np.array([[[0, 1, 2],
[10, 12, 13]],
[[100, 101, 102],
[110, 112, 113]]])
'''[[0]
[1]
[2]]'''
a.resize((3, 1))
'''[[ 0 1 2 10 12]
[ 13 100 101 102 110]
[112 113 0 0 0]]'''
b.resize((3, 5))
print(a)
print(b)
*Numpy计算
条件运算
Numpy.where(condition, x, y):三目运算满足condition,为x;不满足condition,则为y
score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
# 如果数值小于80,替换为0,如果大于等于80,替换为90
re_score = np.where(score < 80, 0, 90)
print(re_score)
统计运算
指定轴最大值:amax(参数1:数组;参数2:axis=0/1,0表示行1表示列)
# 求整个矩阵的最大值
result = np.amax(score)
print(result)
# 求每一列的最大值(0表示行)
result = np.amax(score, axis=0)
print(result)
# 求每一行的最大值(1表示列)
result = np.amax(score, axis=1)
print(result)
指定轴最小值:amin(参数1:数组;参数2:axis=0/1,0表示行1表示列)
# 求整个矩阵的最小值
result = np.amin(score)
print(result)
# 求每一列的最小值(0表示行)
result = np.amin(score, axis=0)
print(result)
# 求每一行的最小值(1表示列)
result = np.amin(score, axis=1)
print(result)
指定轴平均值:mean(参数1:数组;参数2:axis=0/1,0表示行1表示列;参数3:dtype,输出数据类型)
# 求整个矩阵的平均值
result = np.mean(score, dtype=np.int)
print(result)
# 求每一列的平均值(0表示行)
result = np.mean(score, axis=0)
print(result)
# 求每一行的平均值(1表示列)
result = np.mean(score, axis=1)
print(result)
指定轴方差:std(参数1:数组;参数2:axis=0/1,0表示行1表示列;参数3:dtype,输出数据类型)
# 求整个矩阵的方差
result = np.std(score)
print(result)
# 求每一列的方差(0表示列)
result = np.std(score, axis=0)
print(result)
# 求每一行的方差(1表示行)
result = np.std(score, axis=1)
print(result)
类似的,求和:Numpy.sum(),求中值:Numpy.median
数组运算
数组与数的运算(加、减、乘、除、取整、取模)
# 循环数组行和列,每一个数值都加5
score[:, :] = score[:, :]+5
print(score)
# 循环数组行和列,每一个数值都减5
score[:, :] = score[:, :]-5
print(score)
# 循环数组行和列,每一个数值都乘以5
score[:, :] = score[:, :]*5
print(score)
# 循环数组行和列,每一个数值都除以5
score[:, :] = score[:, :]/5
print(score)
# 循环数组行和列,每一个数值除以5取整
score[:, :] = score[:, :] // 5
print(score)
# 循环数组行和列,每一个数值除以5取模
score[:, :] = score[:, :] % 5
print(score)
数组间运算(加、减、乘、除),前提是两个数组的shape一样
加:“+”或者np.add(a, b) 减:“-”或者np.subtract(a, b)
乘:“*”或者np.multiply(a, b) 除:“/”或者np.divide(a, b)
c = score + score
d = score - score
e = score * score
# 分母数组保证每个数值不能为0
b = score / score
Numpy.intersect1d(参数 1:数组a;参数 2:数组b):查找两个数组中的相同元素
Numpy.setdiff1d(参数 1:数组a;参数 2:数组b):查找在数组a中不在数组b中的元素
Numpy.union1d(参数 1:数组a;参数 2:数组b):查找两个数组的并集元素
矩阵运算(一种特殊的二维数组)
计算规则
(M行,N列)*(N行,Z列)=(M行,Z列)
st_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
# 平时成绩占40% 期末成绩占60%, 计算结果
q = np.array([[0.4], [0.6]])
result = np.dot(st_score, q)
print(result)
矩阵拼接
矩阵垂直拼接(前提两个两个矩阵列数相同,行数随意):vstack(参数:tuple)
v1 = [[0, 1, 2, 3, 4, 5],
[6, 7, 8, 9, 10, 11]]
v2 = [[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[18, 19, 20, 21, 22, 23]]
result = np.vstack((v1, v2))
print(result)
矩阵水平拼接(前提两个两个矩阵行数相同,列数随意):hstack(参数:tuple)
v1 = [[0, 1, 2, 3, 4, 5],
[6, 7, 8, 9, 10, 11]]
v2 = [[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]
result = np.hstack((v1, v2))
print(result)
矩阵删除:Numpy.delete(参数 1:a,数组;参数 2:elements,删除的对象;参数 3:axis=0/1)
OriginalY = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(np.delete(OriginalY, [0, 2]))
print(np.delete(OriginalY, [0, 2], axis=0))
print(np.delete(OriginalY, [0, 2], axis=1))
矩阵添加:Numpy.append(参数 1:array,数组;参数 2: elements,添加元素;参数 3: axis=0/1)
OriginalY = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 末尾添加元素
print(np.append(OriginalY, [0, 2]))
# 最后一行添加一行
print(np.append(OriginalY, [[0, 2, 11]], axis=0))
# 最后一列添加一列(注意添加元素格式)
print(np.append(OriginalY, [[0], [2], [11]], axis=1))
矩阵插入:Numpy.insert(参数 1:array,数组;参数 2:index,插入位置索引;参数 3: elements,添加元素;参数 4: axis=0/1)
OriginalY = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(np.insert(OriginalY, 1, [11, 12, 10]))
print(np.insert(OriginalY, 1, [[11, 12, 10]], axis=0))
# 在列索引1的位置插入(注意元素格式,跟添加格式不同)
print(np.insert(OriginalY, 1, [[11, 12, 10]], axis=1))
文件加载
np.loadtxt(fname,dtype,comments='#',delimiter=None,skiprows=0,usecols=None)
fname:读取的文件、文件名
dtype:数据类型
comments:注释
delimiter:分隔符,默认是空格
skiprows:跳过前几行读取,默认是0
usecols:读取哪些列,usecols=(1, 2, 5)读取第1,2,5列,默认所有列
Python常用库之一:Numpy的更多相关文章
- python 常用库整理
python 常用库整理 GUI 图形界面 Tkinter: Tkinter wxPython:wxPython pyGTK:PyGTK pyQt:pyQt WEB框架 django:django w ...
- Python常用库整理
Python常用库整理 Python中到底有哪些库会让程序员爱不释手?以至于一次上瘾,造成永久性伤害(这句话好像在哪里见过),今天我们就来整理一番这样的库,欢迎各位在评论区或者私信我添加或者修改相关库 ...
- python常用库安装网址
python常用库安装网址如下: http://pypi.python.org/pypi
- windows下python常用库的安装
windows下python常用库的安装,前提安装了annaconda 的python开发环境.只要已经安装了anaconda,要安装别的库就很简单了.只要使用pip即可,正常安装好python,都会 ...
- python常用库 - NumPy 和 sklearn入门
Numpy 和 scikit-learn 都是python常用的第三方库.numpy库可以用来存储和处理大型矩阵,并且在一定程度上弥补了python在运算效率上的不足,正是因为numpy的存在使得py ...
- 1,Python常用库之一:Numpy
Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! Numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,Numpy的速度比Python列表的速度 ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- Python常用库大全
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- 【机器学习】--Python机器学习库之Numpy
一.前述 NumPy(Numerical Python的缩写)是一个开源的Python科学计算库.使用NumPy,就可以很自然地使用数组和矩阵. NumPy包含很多实用的数学函数,涵盖线性代数运算.傅 ...
随机推荐
- 对象和类型(数组、ref、out)
class Program { //数组是引用类型 //如果把数组或类等其他引用类型传递给方法,对应的方法就会使用该引用类型改编数组中值, //而新值会反射到原始数组上 static void Som ...
- CMS gc随记
在查看CMS相关中文资料时,都提到了 并发预清理(Concurrent precleaning) 重新标记(STW remark) 目的是重新标记在并发标记阶段,由于对象状态的改变而标记遗漏的对象. ...
- Halcon学习笔记——条形码的定位与识别
一维码的原理与结构 条码基本原理是利用条纹和间隔或宽窄条纹(间隔)构成二进制的”0“和”1“,反映的是某种信息. 一维条码数据结构,分四个区域.组成分别为静区.起始/终止符.校验符.数据符. 一维条码 ...
- C#基础知识-使用XML完成一个小程序(十一)
上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...
- JS实现中英文混合文字溢出友好截取功能
在显示字符串的时候,避免字符串过长往往会对字符串进行截取操作,通常会用到js的 substr 或者 substring方法, 以及 字符串的length属性 substr() 方法可在字符串中抽取从 ...
- python4
列表的常用操作 创建列表 1.创建空列表 列表变量 = [] 2.创建单个数据的列表 列表变量 = [值] ...
- FFmpeg的tutorial 学习
一.前言: 这是一个学习 FFmpeg 的 tutorial 系列. 这个是一个对初学者比较友好的FFmpeg学习教程,作者一步步引导我们实现了一个音视频同步的播放器. 参考链接: 原文地址: htt ...
- IoDH 实现的单例模式
饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存:懒汉式单例类线程安全控制烦琐,而且性能受影响.有种更好的单例模式叫做Initialization Demand Holder (IoDH)的技 ...
- 三种角度解释href/src/link/import区别
网上查到的几种不同但比较容易理解的解释 解释一: href是Hypertext Reference的缩写,表示超文本引用.用来建立当前元素和文档之间的链接.常用的有:link.a.例如: <li ...
- Linux下mongodb
Linux下mongodb安装: 新建mongodb文件夹 下载安装包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3. ...