Numpy
- NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
1 创建 ndarray
-
使用np.array()创建
import numpy as np # 一维数据创建 ret = np.array([1, 2, 3]) # 二维数据创建 ret = np.array([[1, 2, 3], [4, 5, 6]]) print(ret)
-
numpy默认ndarray的所有元素的类型是相同的
-
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
-
使用matplotlib.pyplot获取一个numpy数组,数据来源于一张图片
import matplotlib.pylab as plt # 图片数据转化为数组 img_arr = plt.imread('./cat.jpg') # 数组转图片 img_show = plt.imshow(img_arr) # 操作该numpy数据,该操作会同步到图片中 plt.imshow(img_arr-100)
-
-
使用np的routines函数创建
-
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数列
np.linspace(0,100,num=20)
-
np.arange([start, ]stop, [step, ]dtype=None)
np.arange(0,100,2)
-
np.random.randint(low, high=None, size=None, dtype='l') 随机生成
np.random.seed(100) #固定随机性#随机因子:系统的时间 arr = np.random.randint(0,100,size=(4,5)) #size 4行5列
-
np.random.random(size=None)
生成0到1的随机数,左闭右开 np.random.seed(3)
np.random.random(size=(4,5)) # 4行5列
-
2 ndarray的属性
-
4个必记参数: ndim:维度 shape:形状(各维度的长度) size:总长度
-
dtype:元素类型
arr = np.random.randint(0, 100, size=(4, 5)) arr.ndim arr.shape ...
3 ndarray的基本操作
-
索引
- 一维与列表完全一致 多维时同理
-
切片
- 一维与列表完全一致 多维时同理
np.random.seed(100) # 固定随机性#随机因子:系统的时间 arr = np.random.randint(0, 100, size=(4, 5)) #获取二维数组前两行 arr[0:2] #获取二维数组前两列 arr[:,0:2] # 获取二维数组前两行和前两列数据 arr[0:2,0:2] # 将数组的行倒序 arr[::-1] #列倒序 arr[:,::-1] #全部倒序 arr[::-1,::-1] # 图片倒置,裁剪 plt.imshow(img_arr[:,::-1,:])
-
变形
-
使用arr.reshape()函数,注意参数是一个tuple!
-
将一维数组变形成多维数组 arr_1.reshape((2,10))
arr_1 = np.random.randint(0, 100, size=(1,20)) print(arr_1) print(arr_1.reshape((2, 10))) '''[[ 9 93 86 2 27 4 31 1 13 83 4 91 59 67 7 49 47 65 61 14]] [[ 9 93 86 2 27 4 31 1 13 83] [ 4 91 59 67 7 49 47 65 61 14]] '''
-
将多维数组变形成一维数组 arr.reshape((20,))
-
-
级联
-
np.concatenate()
-
一维,二维,多维数组的级联,实际操作中级联多为二维数组
-
np.concatenate((arr,arr,arr),axis=1)
array([[ 8, 24, 67, 87, 79], [48, 10, 94, 52, 98], [53, 66, 98, 14, 34], [24, 15, 60, 58, 16]]) np.concatenate((arr,arr,arr),axis=1) array([[ 8, 24, 67, 87, 79, 8, 24, 67, 87, 79, 8, 24, 67, 87, 79], [48, 10, 94, 52, 98, 48, 10, 94, 52, 98, 48, 10, 94, 52, 98], [53, 66, 98, 14, 34, 53, 66, 98, 14, 34, 53, 66, 98, 14, 34], [24, 15, 60, 58, 16, 24, 15, 60, 58, 16, 24, 15, 60, 58, 16]])
-
应用,合并参数一致的图片
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)
-
级联的参数是列表:一定要加中括号或小括号
-
维度必须相同
-
形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
-
可通过axis参数改变级联的方向
-
4 ndarray的聚合操作
-
求和np.sum
arr.sum(axis=1) # 横向(axis=1)级联,纵向(axis=0)级联
-
最大最小值:np.max/ np.min
-
平均值:np.mean()
-
其他聚合操作
5 ndarray 的排序
p.sort()与ndarray.sort()都可以,但有区别:
- np.sort()不改变输入
- ndarray.sort()本地处理,不占用空间,但改变输入
np.sort(arr,axis=0)