1. numpy的安装和简介
python科学计算:
科学计算是进行数据分析、数据挖掘与人工智能的基础。
科学计算主要需要完成的任务是:代数方程、矩阵运算、微积分、统计学、微分方程、傅里叶变换等;
python语言本身并不具有科学计算的功能;但是,numpy和scipy等工具的发展让我们能够完成这些算法,并且提供了更多的高级功能。
安装科学计算基础包numpy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
numpy程序包的介绍
numpy是python科学计算的基础程序包,它提供了多维数组和基本的数学计算功能,比如线性代数等。
numpy中有两种基本对象,即N为数组对象和通用函数对象
numpy和scipy的所有的科学计算都建立在numpy的这两种基本对象上
安装可视化数据分析工具matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib--
首先创建一个文件夹
重命名为1-numpy,文件名不可和numpy这个模块名相同
然后进入该文件夹下,新创一个python3文件,重命名为numpy,文件的名字可与模块名相同,当然,也可以不要这样命名,比如mynumpy,这样既明了当前文件,绝对不会有冲突
创建文件成功后,进入该文件
导入numpy,查看是否能成功导入
numpy
一、N维数组对象
- 数组的创建
- 数组的属性
- 数组的索引与切片
- 数组的变形与转换
- 数组的级联
- 数组切分
- 副本
- 聚合
- 矩阵与矩阵运算
- 数组排序
二、通用函数对象
2. N维数组对象
数组是numpy里的基本数据结构
2.1 数组的创建
2.1.1 使用np.array()函数由list来创建
信息世界中的客观信息(如:图片、音频等)也可以通过相关的python工具转化成数组
将一张图片转为数组
这是一个三维数组(现在的彩色图片基本上都是三维数组)
查看一下这个图片的属性
【注意】
- 彩色图片,大部分都是三通道(即每个像素的颜色是由rgb三原色合成的),所有当彩色图片转化成数组时,是一个三维数组,三个维度分别代表像素行数、列数和rgb通道值
- 图片的像素rgb通道值有两种数据类型即uint8(无符号的短整型)或者0-1之间浮点数
为什么是uint8类型呢?因为rgb是0~255,也就是2的0次方 -1 到 2的8次方-1
这是一个坐标系,900行,1440列
扩展 用np.array的方法创建一个12个像素的图片,并显示
提示: 3行4列3通道
boy = np.array([[[0.1,0.2,0.3],[0.2,0.4,0.8],[0.12,0.34,0.78],[0.23,0.34,0.67]],
[[0.65,0.12,0.78],[0.9,0.8,0.5],[0.6,0.5,0.2],[0.22,0.33,0.44]],
[[0.23,0.24,0.25],[0.67,0.98,0.67],[0.2,0.4,0.5],[0.7,0.3,0.8]]])
boy
plt.imshow(boy,cmap="gray")
plt.show()
再扩展一下,黑白的图片怎么弄,黑白图片是二维数组
这里的小数是灰度比例,不是rgb值
img = np.array([[0.9,0.8,0.7],[0.6,0.6,0.2],[0.3,0.4,0.7]])
plt.imshow(img,cmap="gray")
plt.show()
2.1.2 使用np的通用函数来创建
2.1.2.1 np.ones(shape,dtype=None)
2.1.2.2 np.zeros(shape)
2.1.2.3 np.full(shape,fill_value)
2.1.2.4 np.eye()
2.1.2.5 np.linespace(start,stop,num=50)
2.1.2.6 np.logspace(start,stop,num=50)
1.e+00 是1x10^0 =1
1.e+01 是1x10^1 =10
1.e+02 是1x10^2 =100
lg(1) = 0 lg10 = 1 lg100 = 2
0~10 有11个数,切11次, 第一个数是0,也就是 lg(1) ,指数是1;第2个数是1,也就是 lg(10) ,指数是10;
第3个数是2,也就是 lg(100) ,指数是100;
2.1.2.7 np.arange([start],stop,(step))
(3,9,2)从第4个开始取,步长为2,取到第10个
前闭后开,第10个取不到,截至第9个
2.1.2.8 np.random.randint(low,height=None,size=None)
前闭后开
取9~20之间的随机整数,按2x3的格式的二维数组取
2.1.2.9 np.random.randn(d0,d1,d2,…,dn)
2.1.2.10 np.random.normal(loc=0,scale=1,size=None)
以175为对称轴,数据往175集中,标准差为20,数据在基本155~195左右波动,也有少数在这个范围外,数据都靠近于175
2.1.2.11 np.random.random(size=None)
2.2 数组的属性
2.2.1 ndim属性,数组的维度
nd.ndim = 1 nd是一维数组
nd2.ndim = 2 nd2是二维数组
2.2.2 size属性,数组数据量
nd中有3个元素
nd2中有6个元素
数据量是不管多少维度,加起来是多少个元素
2.2.3 shape属性,形状
nd是一维数组 第0个维度有3个元素
nd2是二维数组 第0个维度是2行(2个列表),第1个维度是列表里的3个元素,所以是(2,3)
2.2.4 dtype属性,元素类型
nd中 data = [False,123,19.5]这里有布尔型,整型,浮点型
nd = np.array(data) array([ 0. , 123. , 19.5]) 都转成了浮点型
如果这时候再往data中加类型,加入"qwer",字符串型,看一下列表,没什么变化,但是再数组里,都变成了字符串类型 dype=’<U32’
【注意】1、数组中的所有的元素的类型都要保持一致 2、如果我们用列表来创建数组,列表中的元素类型不一致的时候,首先系统会对元素的类型进行统一化(统一化的优先级:object>str>float>int>bool)
比如,这个类型是对象
可能会有疑问,为什么这个不是二维数组,而是对象
举个列子,这是一个二维数组
现在修改一下,把9去掉,这里最后的列表中只有两个元素,然后,这个就成了对象类型,而且是一维数组,不是二维
【扩展】如果用多维list来创建多维数组的时候,要求每个维度的子元素内部的size保持一致,否则,系统就会认为这些子元素是多个对象数据,就会把他们归到同一个维度中