numpy
numpy
参考 https://www.cnblogs.com/yanzhi-1996/p/11095748.html
概念
1. 数据分析:是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律.
2. NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务:
1) 机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
2) 图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
3) 数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
参考: https://www.numpy.org.cn/
创建ndarray
import numpy as np
import matplotlib.pyplot as plt
1. 一维数组的创建
arr = np.array([1,2,3,4,5])
2. 创建二维数组
arr = np.array([[1,'two',3],[4,5,6]])
注意:
- numpy默认ndarray的所有元素的类型是相同的
- 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
3. 使用matplotlib.pyplot获取一个numpy数组,数据来源于一张图片
img_arr = plt.imread('./cat.jpg')
plt.imshow(img_arr) # 展示图片
1) 操作该numpy数据,该操作会同步到图片中
img_arr = img_arr - 50 # 每个元素值-50
img_arr.shape # 数组形状: (456, 730, 3) -> 456: 横向数量 730: 纵向数量 3:维度
使用np的routines函数创建
1. 指定维度以及值: np.full()
np.full(shape=(5,6),fill_value=666)
2. 指定个数的等差数列
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
np.linspace(0,100,num=10) # num: 指的为个数
3. 指定间隔的等差数列
np.arange([start, ]stop, [step, ], dtype=None)
np.arange(0,100,2) # 2: 指的是数之间的间隔
注意: 2和3只能创建一维数组
4. 随机产生整数数组
np.random.randint(low, high=None, size=None, dtype='l')
np.random.randint(0,100,size=(6,7))
5. 生成0到1的随机数,左闭右开
np.random.random(size=None)
np.random.random(size=(4,5))
6. 固定随机性(随机因子)
np.random.seed(10)
np.random.randint(0,100,size=(6,7))
ndarray的属性
1. ndim: 维度
img_arr.ndim # 3
2. shape: 形状(各维度的长度)
3. size: 总长度
img_arr.size # 998640: 元素的个数
4. dtype: 元素类型
img_arr.dtype # dtype('uint8')
ndarray的基本操作
1. 索引
一维与列表完全一致, 多维时同理
arr[0][1]
2. 切片
1) 获取二维数组前两行
arr[0:2]
2) 获取二维数组前两列
arr[:,0:2] # arr[行切,列切]
3) 获取二维数组前两行和前两列数据
arr[0:2,0:2]
3. 将数据反转,例如[1,2,3]---->[3,2,1]
1) 将数组的行倒序
arr[::-1]
2) 列倒序
arr[:,::-1]
3) 全部倒序
arr[::-1,::-1] # arr[行,列]
4) 将图片进行全倒置操作
plt.imshow(img_arr[:,::-1,:])
4. 变形
使用arr.reshape()函数,注意参数是一个tuple!
将x维变为y维
1) 将一维数组变形成多维数组 # 要注意元素的个数要对应
arr.reshape((2,3))
2) 将多维数组变形成一维数组
arr = arr1.reshape((6))
5. 切分
与级联类似,三个函数完成切分工作:
- np.split(arr,行/列号,轴):参数2是一个列表类型
- np.vsplit
- np.hsplit
1) 横向切分第二行
np.split(a1,[2],axis=1)
级联
np.concatenate()
示例:
a1 = np.random.randint(0,100,size=(4,5))
a2 = np.random.randint(0,100,size=(4,5))
a3 = np.random.randint(0,100,size=(4,4))
display(a1,a2,a3)
1.一维,二维,多维数组的级联,实际操作中级联多为二维数组
np.concatenate((a1,a2),axis=1) # axis: 1代表行级, 0代表列级
2. 图片九宫格
img_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # 三宫格
img_9 = np.concatenate((img_3,img_3,img_3),axis=0) # 九宫格
plt.imshow(img_9)
3. np.hstack与np.vstack
级联需要注意的点:
- 级联的参数是列表:一定要加中括号或小括号
- 维度必须相同
- 形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
- 可通过axis参数改变级联的方向
ndarray的聚合操作
1. 求和: np.sum
1) 横向求和
a1.sum(axis=0)
2. 最大最小值:np.max/ np.min
3.平均值:np.mean()
4. 其他聚合操作
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
ndarray的排序
1. 快速排序
np.sort()与ndarray.sort()都可以,但有区别:
- np.sort() # 不改变输入
- ndarray.sort() # 本地处理,不占用空间,但改变输入
1) 按照列进行排序
np.sort(a1,axis=0)
2) 按照行进行排序
arr.sort(axis=1)