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包的学习和使用相关推荐

  1. java concurrent包的学习(转)

    java concurrent包的学习(转) http://my.oschina.net/adwangxiao/blog/110188 我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常 ...

  2. Python——常用Python包的学习笔记

    1 致谢 感谢陈助教的帮助! 2 前言 今天想通过画图展现一下学习参考值的变化情况,在网上看了一下,需要使用plt包,不过又忘了plt是做什么用的了,于是想要记录一下,写一下关于常用Python包的笔 ...

  3. caret包介绍学习之train函数介绍

    caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验.关于caret包在这些方面的应用可以参看文章: R语言之-caret包应用 R语言caret包的学习 ...

  4. python segy格式地震数据读写包segyio学习笔记(二)

    python segy格式地震数据读写包segyio学习笔记(二) 最近大致搞明白了segyio读取叠后和叠前segy数据的方法,以及内部存储结构,以两段代码为例: 叠后数据读取.这是一个从给定时窗内 ...

  5. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  6. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  7. go语言path包和filepath包的学习与使用

    path包的使用 package main;import ("fmt""path" )//go语言path包的学习func main() {//返回路径的最后一 ...

  8. puppet最新源码包安装学习笔记

    最近去面试了2家大的电商网站的运维工作,公司对系统的自动化管理,虚拟化,mysql集群,系统性能的优化和shell及python编程的要求都比较高,虽然没有面试成功,但也明白了2013年自己学习的目标 ...

  9. tomcat jar包_tomcat学习|tomcat中的类加载器

    开头说两句 小刀博客: http://www.lixiang.red 小刀公众号: 程序员学习大本营 学习背景 上期我们聊到了tomcat中各个组件在默认值,在其中,我们看到了有关类加载器的代码, 如 ...

最新文章

  1. SubVersion和Subclipse的简单使用方法
  2. 最新阿里内推Java后端面试题
  3. VS code配置c环境
  4. DP 状态机模型 AcWing算法提高课 详解
  5. 分布式文件系统—HDFS—Java API操作
  6. 网络协议之:socket协议详解之Datagram Socket
  7. Go语言操作MySQL
  8. ETCD for java_etcd-java使用
  9. 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey
  10. mysql用户管理--密码管理
  11. 计算机体系结构和计算机组成哪个重要,计算机组成和体系结构教学初探.doc
  12. 数学教育与计算机教育ppt,计算机基础教育课件.ppt
  13. SecureCRT软件的使用
  14. CC26xx(CortexM3) UARTs
  15. 基于阿里语音识别(ASR)C/C++ SDK2.0编写的unimrcp中间件
  16. Vue:Array变化侦测
  17. RF自动化测试框架(二)
  18. 多个excel工作簿、工作表合并
  19. 笔记-Codeforces比赛
  20. 深入理解模拟退火算法(Simulated Annealing)

热门文章

  1. iBATISSpring合奏(五)--整合lucene搜索表字段内容
  2. 本地连接github
  3. 小马哥--高仿三星S5 9006 主板型号A215刷机拆机主板图与开机界面图
  4. App广告监测:通过工具解决四大广告归因难题
  5. 在本公司两周年纪念+工作感想
  6. winform 实现任意进制转换
  7. 27个人买饮料,3个空瓶换1瓶,问至少买多少瓶,才能每个人都能喝到一瓶?
  8. 元宇宙买房爆赚1000倍?
  9. [UnityShader入门精要读书笔记]15.渐变纹理
  10. python zipfile extract 解压 中文文件名