PythonNumpy包的学习和使用
Numpy包简单介绍
Numpy 是Python中用于科学计算的基础包,广泛应用于数据分析和挖掘
numpy的核心基础是N维数组,
使用numpy首先需要安装numpy包,
在pycharm中创建好项目可以alt+F12打开terminal终端面板输入pip install numpy
待下载完毕后可通过alt+ctrl+s-numpy projectnumpy -python interpreter中查看是否安装成功
初步使用Numpy
example1 将嵌套的列表转换为二维数组
L = [[1,2,3],[2,3,4]] # 定义一个二维数组
import numpy as np # 导入numpy包使用as关键字进行重命名
A = np.array(L) # 调用np包中的array()函数,将L转化为二维数组并赋给A
print(type(A)) # 使用type关键字查看A的数据类型 是一个ndarray类型
print(type(L)) # 是一个列表类型
创建数组(1)使用array()函数
import numpy as np # 导入numpy 调用array()函数,创建数组
# 创建数组的方法number(1)
# 利用Numpy中的array()函数特定的数据类型转化为数组
# 预定义列表a1 元祖a2,列表a3、a4,元祖a5、a6
a1 =[1,2,4]
a2 = (1,'a',{'name':"join"})
a3 = [[2,3,4],(3,4,5)]
a4 = [[1,2],[7,8,9]]
a5 = (('a','b','c'),['1','2','3'])
a6 = ((1.2,3,4),(2,3,4))
a11 = np.array(a1)
a22 = np.array(a2)
a33 = np.array(a3)
a44 = np.array(a4,dtype=object)
a55 = np.array(a5)
a66 = np.array(a6)
print(a11,a22,a33,a44,a55,a66)
注意:
第14行代码嫁了dtype=object是为了解决a4不规则嵌套列表所引发的警告
如果出现多数不规则嵌套的话 可以通过添加以下代码解决问题
import warnings
warnings.filterwarnings("ignore", category=Warning)
使用del删除生成的ndarray变量
del a11,a22,a33,a44,a55,a66
使用内置函数创建数组
利用内置函数可以创建一些特殊的数组,可以学习使用ones(),zeros(),arange()函数
# 利用内置函数创建数组
import numpy as np
z1 = np.ones((3,3)) # 创建3行3列全为1的数组(二维)
z2 = np.zeros((3,4)) # 创建3行4列全为0 的数组 (二维)
z3 = np.arange(10) # 默认初始值为0,默认步长为1,末尾值为9的一维数组
z4 = np.arange(2,10) # 初始值为2,默认步长为1,末位值为9
z5 = np.arange(2,10,2) # 初始值为2,步长为2,末位值为9
print("z1的结果为:",z1)
print("z2的结果为:",z2)
print("z3的结果为:",z3)
print("z4的结果为:",z4)
print("z5的结果为:",z5)
下面是代码的输出结果:
数组尺寸(数组大小)
使用数组中的shape属性,返回值为元祖。
一维数组返回的是元素的长度,有一个值,
二维数组返回的是两个值,前一个表示行数,后一个表示列数
——代码如下:
# 数组尺寸(数组大小)
d1 = [1.2,42,4,2,4,5,6,73,4]
d2 =[[12,34,2,4],[23,4,1,4]]
import numpy as np
d11 =np.array(d1) # 将列表转换为一维数组,赋给变量d11
d22 = np.array(d2) #将嵌套列表转换为二维数组,赋给变量d22
d111=d11.shape # 返回一维数组d11的大小,付给变量d111
d222=d22.shape # 返回二维数组d22的大小,赋给变量d222
print(d111)
print(d222)
结果为
(9,)(2,4)
数组重排
import numpy as np
# 数组重新排列
r=np.array(range(9))
r1=r.reshape((3,3))
print(r1)
上述代码解释:
使用range函数生成从0开始9个数字的一维数组,在使用reshape函数排为3行3列的数组规格。
数组运算:
数组之间加减乘除、乘方,以及数学函数的运算。
# 数组运算
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[1,2],[2,1]])
C1 = A-B # 两数组相减
C2 = A+B # 两数组相加
C3 = A*B # 两数组相除
C4 = A/B #两数组相乘
C5 = A/3 # 数组所有元素除以3
C6 = 1/A # 1除以数组所有元素
C7 = A ** 2 # 数组所有元素平方
C8 = np.array([1,2,3,4,5,6,7,8,9])
C9 = (C8-min(C8))/(max(C8)-min(C8)) # 对C8中的元素做级差化处理
D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
# 数学运算
E1 = np.sqrt(D) # 平方根
E2 = np.abs([1,-2,-100]) # 取绝对值
E3 = np.cos([1,2,3]) # 取cos值
E4 = np.sin(D) # 取 sin 值
E5 = np.exp(D) # 取指数函数值
print(E5)
数组切片
切片即抽取数组中的部分元素构成新的数组
# 数组切片
import numpy as np
D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
# 访问D中行为1,列为2的数据,行、列从0开始数起
D1 = D[1,2]
D2 = D[:,[1,3]] # 访问D中的1,3列数据
D3 = D[[1,3],:] # 访问D中1,3行数据
Dt1 = D[D[:,0]>5,:] # 选取D中第0列大于5的数据
Dt2 = D[D[:,0]>5,[2,3]] #选取D中第0列大于5的2,3列数据
TF = [True,False,False,True]
Dt3 = D[TF,:] # 取D中0,3行的所有列数据,取逻辑值为真的行
Dt4 = D[TF,[2,3]] # 取D中0,3行2,3列数据
D5 = D[D>4] # 取D中大于4的所有元素
数组的欺骗也可以通过ix_()函数构造行,列下标索引来实现。
# 数组切片
import numpy as np
D = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
# 选取D中行数为1,2列数为,1,3的所有元素
D3 = D[np.ix_([1,2],[1,3])]
#提取行数为0,1,列数为1、3的所有元素
D4=D[np.ix_(np.arange(2),[1,3])]
# 提取以D中第1列小于11得到的逻辑数组作为行索引,列数为1,2的所有元素
D5 = D[np.ix_(D[:,1]<11,[1,2])]
# 提取以D中第1列小于11得到的逻辑数组作为行索引,列数为2的所有元素
D6 = D[np.ix_(D[:,1]<11,[2])]
TF = [True,False,False,True]
D7 = D[np.ix_(TF,[2])]
D8 = D[np.ix_(TF,[1,3])]
数组连接
数组连接分为水平连接,垂直连接(水平连接,hstack())(垂直连接vstack())
# 数组连接
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
# 注意:输入参数为两个代连接数组组成的元祖
C_s = np.hstack((A,B)) # 水平连接要求行数相同
C_v = np.vstack((A,B)) # 垂直连接要求列数相同
数据存取
利用Numpy包中的save()函数,可以将数据集保存为二进制数据文件,扩展名为.npy
使用load()函数加载数据集
import numpy as np
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
C_s = np.hstack((A,B)) # 水平连接
# sava()函数,保存为二进制文件,扩展名为.npy
np.save('data',C_s)
# 使用load()函数加载数据及
C_sava = np.load('data.npy')
print(C_sava)
输出加载的数据
数据排序
import numpy as np
arr = np.array([5,2,3,3,1,-5,9,8,6,7])
arr1 = np.sort(arr) # 升序
print(arr1)
arr2 = -np.sort(-arr) # 降序
print(arr2)
# Numpy包提供的argmax()和argmin()函数,可以返回待搜索数组的最大值和最小值元素的索引值
arr3 = np.array([5,2,3,3,1,1,9,8,6,7,8,8])
arr4 = arr3.reshape(3,4) # 三行四列
maxindex =np.argmax(arr3)
minindex =np.argmin(arr3)
# 如果存在多个最大值或最小值,则返回第一次出现的索引值。
print(maxindex)
print(minindex)
# 对于二维数组可以设置
maxindex1=np.argmax(arr4,axis=0) # 返回各列最大值的索引值
minindex1=np.argmax(arr4,axis=1) # 返回各行最小值的索引值
矩阵的运算
Numpy包的matrix()函数继承自Numpy的二维ndarray对象,不仅拥有ndarry的属性方法和函数
同时Numpy中的matrix函数和线性代数中的矩阵概念几乎完全相同,含有转置矩阵,共轭矩阵、逆矩阵等概念。
在Numpy中可以使用mat()、matrix()或bmat()函数来创建矩阵
使用mat()函数创建矩阵时,若输入matrix或ndarry对象,则不会为它们创建副本。
因此,调用mat()函数与调用matrix(data,copy=False)等价。
实例代码如下:
# 矩阵线性代数运算
import numpy as np
mat1 = np.mat("1,2,3;4,5,6;7,8,9")
mat2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
# print(mat1)
# print(mat2)
在Numpy中可以使用bmat()分块矩阵(将小矩阵合并为大矩阵)
矩阵的属性和基本运算
矩阵的特有属性及其说明如下:
在Numpy中,矩阵计算和ndarry计算类似,都能欧作用于每个元素,比起使用for循环进行计算。矩阵计算更加高效
import numpy as np
mat1 = np.mat("1 2 3; 4 5 6; 7 8 9")
print(mat1)
mat2 = mat1*3
print(mat2)
mat3 =mat1+mat2
print(mat3)
mat4 = mat1-mat2
print(mat4)
mat5 = mat1*mat2
print(mat5)
mat6 = np.multiply(mat1,mat2) # 点乘
print(mat6)
线性代数计算
线性代数是数学的一个重要分支,Numpy包含numpy.linalg模块,提供线性代数所需的功能,如矩阵相乘,计算逆矩阵,求解线性方程组
求解特征值与特征向量、奇异值分界以及计算矩阵行列式的值等。
numpy.linalg模块中的一些常用函数如下图所示
计算逆矩阵
在线性代数中,矩阵A与其逆矩阵B相乘,得到一个单位矩阵,E即A×B=E。使用numpy.linalg
求解线性发方程组
矩阵可以对向量进行线性变换,对应数学中的线性方程组
numpy.linalg模块中的solve()函数可以求解形如Ax = b
的线性方程组,其中A为矩阵,b为一维或二维数组,x是位置变量。
实例代码如下:
求解特征值与特征向量
设A是N阶方阵,如果存在数a和非零N维向量,x,使得Ax=ax成立,则称a是A的一个特征值,非零n维列向量x称为矩阵A的对应于特征值a的特征向量。
numpy.linalg模块中的eigvalues()函数可以求解矩阵的特征值,eig()函数可以返回一个包含特征值和对应特征向量的元祖,示例代码如下:
计算矩阵行列式的值
矩阵行列式是指矩阵的全部元素构成的行列式,但构成行列式的矩阵为方阵时,行列式存在。numpy.linalg模块中的det()函数可以计算矩阵行列式的值。示例代码如下:
import numpy as np
A = np.mat('1,2;4,4')
print(A)# 生成两行两列的矩阵
A_value = np.linalg.det(A)
print(A_value) # 计算这个方阵行列式的值
本次对numpy包的基础学习使用,个人讲解到此结束!!!
如果有前辈大牛们,发现文章中有错误、不足之处,请在评论区指出!!!
谢谢观看!
PythonNumpy包的学习和使用相关推荐
- java concurrent包的学习(转)
java concurrent包的学习(转) http://my.oschina.net/adwangxiao/blog/110188 我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常 ...
- Python——常用Python包的学习笔记
1 致谢 感谢陈助教的帮助! 2 前言 今天想通过画图展现一下学习参考值的变化情况,在网上看了一下,需要使用plt包,不过又忘了plt是做什么用的了,于是想要记录一下,写一下关于常用Python包的笔 ...
- caret包介绍学习之train函数介绍
caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验.关于caret包在这些方面的应用可以参看文章: R语言之-caret包应用 R语言caret包的学习 ...
- python segy格式地震数据读写包segyio学习笔记(二)
python segy格式地震数据读写包segyio学习笔记(二) 最近大致搞明白了segyio读取叠后和叠前segy数据的方法,以及内部存储结构,以两段代码为例: 叠后数据读取.这是一个从给定时窗内 ...
- 友盟统计+渠道包_学习笔记
友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...
- C++ 中 参数包 (typename ...) 学习笔记
C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...
- go语言path包和filepath包的学习与使用
path包的使用 package main;import ("fmt""path" )//go语言path包的学习func main() {//返回路径的最后一 ...
- puppet最新源码包安装学习笔记
最近去面试了2家大的电商网站的运维工作,公司对系统的自动化管理,虚拟化,mysql集群,系统性能的优化和shell及python编程的要求都比较高,虽然没有面试成功,但也明白了2013年自己学习的目标 ...
- tomcat jar包_tomcat学习|tomcat中的类加载器
开头说两句 小刀博客: http://www.lixiang.red 小刀公众号: 程序员学习大本营 学习背景 上期我们聊到了tomcat中各个组件在默认值,在其中,我们看到了有关类加载器的代码, 如 ...
最新文章
- SubVersion和Subclipse的简单使用方法
- 最新阿里内推Java后端面试题
- VS code配置c环境
- DP 状态机模型 AcWing算法提高课 详解
- 分布式文件系统—HDFS—Java API操作
- 网络协议之:socket协议详解之Datagram Socket
- Go语言操作MySQL
- ETCD for java_etcd-java使用
- 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey
- mysql用户管理--密码管理
- 计算机体系结构和计算机组成哪个重要,计算机组成和体系结构教学初探.doc
- 数学教育与计算机教育ppt,计算机基础教育课件.ppt
- SecureCRT软件的使用
- CC26xx(CortexM3) UARTs
- 基于阿里语音识别(ASR)C/C++ SDK2.0编写的unimrcp中间件
- Vue:Array变化侦测
- RF自动化测试框架(二)
- 多个excel工作簿、工作表合并
- 笔记-Codeforces比赛
- 深入理解模拟退火算法(Simulated Annealing)