2.1 ndarray多维数组
2.1.1 创建ndarray数组
通过NumPy库的array函数,即可轻松地创建ndarray数组。NumPy库能将数据(列表,元组,数组,或其他序列类型)转换为ndarray数组
第一步先要引入NumPy库:import numpy as np
array函数 语法;np.array(data)
参数说明:data为需要转换为ndarray数组的序列
通常来说,ndarray是一个通用的同结构数据容器,即其中的所有元素都需要是相同的类型,当创建好一个ndarray数组时,同时会在内存中储存ndarray的shape和dtype
shape:ndarry维度大小的元组
dtype:解释说明ndarray数据类型的对象
NumPy库还有一些函数可以创建特殊的数组
arange 类似于内置的range函数,用于创建数组
ones 创建指定长度或形状的全1数组
ones_like 以另一个数组为参考,根据其形状和dtype创建全1数组
zeros,zeros_like 同上,创建没有具体值的数
eye,identity 创建正方形的N*N单位矩阵

2.1.2 ndarray对象属性
.ndim 即数据轴的个数
.shape 数组的维度
.size 元素的个数
.dtype 数据类型
.itemsize 数组中每个元素的字节大小

2.1.3 nadarry数据类型
浮点数(float),整形(int),复数(complex),布尔值(bool),字符串(string_),Python对象(object)
astype方法进行数据类型的转换
语法:arr.astype(np.float64|'float64')

2.1.4 数组转换
1.数组重塑
reshape方法改变其数据维度
语法:arr.reshape((x,y))
x:行
y:列,可以设置为-1,表示数组的维度可以通过数据本身来推断
数据散开(ravel)或扁平化(flatten)
语法:arr.ravel() 语法:arr.flatten()
说明:arr:ndarray数组 说明:arr:ndarray数组
2.数组合并
conzatenate方法通过指定轴方向,将多个数组合并在一起
注意:轴用来为超过一维的数组定义的属性,二维数组拥有两个轴:第0轴(axis=0)沿着行的垂直往下,第1轴(axis=1)沿着列的方向水平延伸
语法:np.concatenate([arr1,arr2],axis=0|1) axis:指定轴
vstack和hstsck方法也可以进行数组合并
语法:np.vstack((arr1,arr2)) 语法:np.hstack((arr1,arr2))
3.数组拆分
split方法可以将数组拆分为多个数组
语法:np.split(arr,indices_or_sections,axis=0)
arr 要切分的数组
indices_or_sections 如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
axis 沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
4.数组置换和轴对换
转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置
transpose方法需要传入轴编号组成的元组,这样就完成了数组的转置
数组的T属性,也可用于数组的转置
swapaxes方法用于轴对换

2.1.5 NumPy的随机数函数
rand 产生均匀分布的样本值
randint 给定范围内取随机整数
randn 产生正态分布的样本值
seed 随机数种子
permutation 对一个序列随机排序,不改变原数组
shuffle 对一个序列随机排序,改变原数组
uniform(low,high,size) 产生具有均匀分布的数组,low表示起始值,high表示结束值,size表示形状
normal(loc,scale,size) 产生具有正态分布的数组,loc表示均值,scale表示标准差
poisson(lam,size) 产生具有泊松分布的数组,lam表示随机事件发生率

2.2 数组的索引和切片
2.2.1 数组的索引
一维数组的索引类似于Python列表
数组的切片返回的是原始数组的视图。简单地说,视图就是原始数组的表现形式,切片操作并不会产生新数据,这就意味着在视图上的操作都会使原数组发生改变。
如果需要的并非视图而是要复制数据,则可以通过copy方法来实现
在高维数组中,如果省略后面的索引,则会返回低一个维度的数组
2.2.2 数组的切片
一维数组的切片同样类似于Python列表
多维数组的切片是按照轴方向进行的,当在中括号中输入一个参数时,数组就会按照0轴(也就是第一 轴)方向进行切片
python numpy数组中冒号的使用:
python中冒号实际上有两个意思: 1.默认全部选择; 2.指定范围(注意这里含左不含右)
2.2.3 布尔型索引
注意:布尔型数组长度必须和被索引的长度一致
2.2.4 花式索引
花式索引是NumPy中的术语,它可以通过整数列表或数组进行索引
也可以使用np.ix_函数完成同样的操作

2.3 数组的运算
2.3.1 数组和标量间的运算
数组之所以很强大而且重要的原因,是其不需要通过循环就可以完成批量计算,也就是矢量化。相同维度的数组的算术运算都可以直接应用到元素中,也就是元素级运算。
2.3.2 通用函数
通用函数是一种对数组中的数组执行元素级运算的函数
一元函数:函数传入一个数组
abs函数求绝对值
square函数求平方
二元函数:有一些函数需要传入两个数组并返回一个数组
add函数用于两个数相加
minimum函数可以计算元素最小值
有些通用函数还可以返回两个数组,例如modf函数可以返回数组元素的小数和整数部分
2.3.3 条件逻辑运算
如果需要通过cond的值来选取arr1和arr2的值,当cond为True时,选择arr1的值,否则选择arr2的值,可以通过if语句判断来实现
if方法存在的两个问题:第一,对大规模数组处理速度不是很快;第二,无法用于多维数组 where函数可以解决这两个问题
where函数:where(condition,x,y) 满足条件(conditin),输出x,不满足输出y
2.3.4 统计运算
NumPy库支持对整个数组或指定轴向的数据进行统计计算
sum函数用于求和
mean函数用于求算术平均数
std,var函数用于求标准差和方差
min,max函数求最小值和最大值
argmin,argmax函数求最小和最大元素索引
cumsum函数求所有元素的累计和
cumpord函数求所有元素的累计积
2.3.5 布尔型数组运算
对于布尔型数组,其布尔值会被强制转换为1(Ture)和0(False)
any和all也可以用于布尔型数组运算
any函数用于测试数组中是否存在一个或多个Ture
all函数用于检查数组中的所有值是否为Ture
2.3.6 排序
与Python列表相似,NumPy数组也可以通过sort方法进行排序
sort函数进行排序(从小到大) 对于多维度数组,可以通过指定轴方向进行排序
2.3.7 集合运算
NumPy库中提供了针对一维数组的基本集合运算。在数据分析中,常使用np.unique方法来找出数组中的唯一值
注意:对唯一-值进行了排序
unique(x)唯一值
intersectld(x,y)公共元素
unionld(x,y)并集
setdiffd(x,y)集合的差
setxorld(x,y)交集取反
2.3.8 线性代数
数组的运算是元素级的,数组相乘的结果是各对应元素的积组成的数组。而对于矩阵而言,需要求的是点积,这里NumPy提供了用于矩阵乘法的dot函数。
点积:在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积
dot函数矩阵乘法

2.4 数组的存取
2.4.1数组的存储
通过np.savetxt方法可以对数组进行存储
np.savetxt(fname, X, fmt= *%.18e',delimiter=' ,newline="\n',header=", footer=", comments='# ' encoding=None)

2.4.2数组的读取
对于存储的文件,可以通过np.loadtxt方法进行读取,并将其加载到一个数组中
np.loadtxt(fname, dtype= <class'float'>, comments='#',delimiter=None, converters=None, skiprows=0, usecols =None,unpack=False, ndmin=0, encoding='bytes')

拓展文件存储方法:

2.5 综合实例
2.5.1 图像转换
图像一般采用的是RGB色彩模式,即每个像素点的颜色有R (红)、G(绿)、B(蓝)组成。通过三种颜色的叠加可以得到各种颜色,每个颜色的取值范围为0~255。Python中的PIL库是一 个处理图像的第三方库