1、简介安装

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
一个强大的N维数组对象 ndarray
整合 C/C++/Fortran 代码的工具
线性代数、傅里叶变换、随机数生成等功能

pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

2、创建数组

2.1、常用属性

import numpy as np
# 返回当前版本号
np.__version__

# 创建数组
a = np.array(
    [[1,2,3,4,5],
    [10,9,8,7,6]]
    )
# 维度 2维
a.ndim
# 形状 (2,5)
a.shape
# 数量 10
a.size
# 元素类型dtype('int64')
a.dtype

2.2、数组初始化

# 1、创建全部是1的数组,长度为8
np.ones(8,dtype='int64')
# 创建一个2行3列数组
A = np.ones((2,3))
# 创建一个和A形状相同的数组
np.ones_like(A)

# 2、创建全部为0的数组
np.zeros((2,3))

# 3、指定数组2行3列 元素全部为8
B = np.full((2,3),8)
# 创建形状相同,指定元素为8
np.full_like(B,8)

# 4、创建一个为空的数组
C = np.empty((2,3))
np.empty_like(C)

# 5、创建等差数组
np.arange(10)
# 创建等差,从1开始,到10,步长为2的
np.arange(1,10,2)

# 6、使用reshape改变数组形状
np.arange(10).reshape(2,5)

# 7、使用linspce创建等差数组(从0开始10结束包含10,一共生成5个数)
np.linspace(0,10,5)

2.3、随机数模块

# 1、创建随机数模块,创建5个0-1之间的数
np.random.random(5)

# 2、randint随机整数,返回5-10之间随机整数(包含5不包含10),size生成2行4列
np.random.randint(5,10,size=(2,4))

# 3、随机数种子(种子生产随机数一样)
np.random.seed(666)
np.random.randint(5,10,size=(2,4))

# 4、返回正态分布的值,均值为0,标准差为1,2行4列
np.random.randn(2,4)

# 5、normal可以生成均值方差(默认均值为0,标注差为1)
np.random.normal()
# 设置均值10,标注差100,2行4列
np.random.normal(10,100,size=(2,4))

# 6、uniform均匀分布的随机数据,每个值概率都相等(默认0-1)
np.random.uniform()
# 表示生成1,5之间随机数
np.random.uniform(1,5,size=(2,4))

2.4、一维数组索引操作

# 基础索引
a = np.arange(10)

# 1、-1表示最后一个
a[-1]

# 2、切片操作 取0-4的值
a[0:5]
# 也可以省略0
a[:5]

# 3、从第5个元素到最后一个
a[4:]

# 4、取倒数第三个到最后
a[-3:]

# 5、取全部
a[:]

# 6、步长为2取
a[::2]

# 7、倒叙取
a[::-1]

2.5、二维数组索引操作

# 基础索引
a = np.arange(10)
# 将一维数组,转换成4行5列二维数组
A = np.arange(20).reshape(4,5)

# 1、取第一行到全部数据
A[0,:]
# 也可以这样子写
A[0]

# 2、取最后一行
A[-1]

# 3、取第一列所有数据
A[:,0]

# 4、取最后一列所有数据
A[:,-1]

# 5、取前两行前四列数据
A[0:2,0:4]
A[:2,:4]

# 6、将所有行列到序
A[::-1,::-1]

说明:
# numpy中的切片操作注意,如果将切片后的值复给了另外一个数组,修改另外一个数组的值,原数组也会被修改,因为用了引用
# 想要避免就调用copy()方法

2.6、一维数组排序操作

# 1、计算最大最小值
x = np.random.normal(0,1,size=1000000)
np.min(x)
np.max(x)

# 2、最小值在数组中的索引位置
np.argmin(x)

# 创建数组
x = np.arange(10)

# 3、打乱数组
np.random.shuffle(x)

# 4、不会对原生数组x进行排序
np.sort(x)

# 5、会对x方法进行排序
x.sort()
# 反转数组
x[::-1]

# 6、使用索引
np.random.shuffle(x)

# 7、返回排序好之后的元素,在原数组中的索引位置
np.argsort(x)

# 8、分区partition(小于数组索引5的元素的在左边,大于5的在右边)
np.partition(x,5)
# 返回的是索引在原数组中所在位置
np.argpartition(x,5)

2.7、二维数组排序操作

# 高维情况
X = np.random.randint(10,size=(2,4))
np.sort(X)
# 传0是按行,传1按列
np.argsort(X,axis=1)

2.8、神奇索引操作

# 神奇索引比较
c = np.arange(10)
# 1、切片,索引2-8,不包含8
c[2:8]
# 2、切片,索引2-8,不包含8,步长为2
c[2:8:2]

X = c.reshape(2,-1)
row = np.array([0,1,0])
col = np.array([0,2,4])
X[row,col]
# 3、取row的前两列
X[row,:2]

2.9、运算符操作

# 1、返回布尔类型数组
c<5

# 2、在数组中找出比3大的数组
c[c>3]

# 3、找到所有偶数
c[c%2==0]

# 4、返回小于5的个数
np.count_nonzero(x<5)
# 计算小于5的个数
np.sum(x<5)

# 5、判断是否有小于0的数
np.any(x<0)

# 7、数组里面的所有数是否满足下面特性
np.all(x>1)

# 8、使用$ | ~
# x<5并且x>1
np.sum((x<5)&(x>1))
np.sum((x<5)|(x>1))
# 除了0其他的都满足
np.sum(~(x==0))

2.10、数组拆分合并操作

# 1、numpy中合并与拆分操作
A = np.arange(12).reshape(3,4)
a = np.array([6,6,6,6]) 

# 2、因为a是一维数组,合并前提必须是同维度数组
np.concatenate((X,a.reshape(1,4)))

# 3、不需要转变维度,水平方向合并
np.vstack((X,a))
# 竖直方向合并
B = np.full((3,2),666)
np.hstack((X,B))

# 4、默认值axis=0表示行,axis=1表示列
np.concatenate((X,B),axis=1)


# 拆分操作
np.split(X,[-1],axis=0)
# 5、按照列进行拆分
np.split(X,[-1],axis=1)
# [0:2] [2:]
# 水平拆分
np.vsplit(X,[2])
# 垂直操作
# [0:1] [1:3] [3:]
np.hsplit(X,[1,3])

2.11、矩阵运算一

# 矩阵运算
# 1、一元运算
# 创建1-10步长0.5数组
X = np.arange(1,11,0.5)

# 2、绝对值
np.abs(X)

# 3、开方
np.sqrt(X)

# 4、平方运算
np.square(X)

# 5、e的指数运算
np.exp(X)
# 以e为底的计算
np.log(X)
# 以2为底的计算
np.log2(X)

# 6、向上取整
np.ceil(X)
# 向下取整
np.floor(X)

# 7、四舍六入(奇进偶不进)
np.round(X)

# 8、三角函数
np.sin(X)
np.cos(X)
np.tan(X)

# 9、二元运算
np.add(X,1)
X//2
X%2
X**3

2.12、矩阵计算二

# 1、矩阵计算
X = np.linspace(10,40,4).reshape(2,2)
Y = np.linspace(1,4,4).reshape(2,2)
X+Y
Y-X
X*Y

# 2、真正矩阵计算 10*1+20*3 = 70,
X.dot(Y)

# 3、转置,行变成列,列变成行
X.T
np.transpose(X)

# 4、矩阵求和,按照行、列输出
np.sum(X,axis=1)

# 5、求均值
np.mean(X)

# 6、中位数
np.median(X)

# 7、标准差
np.std(X)

# 8、方差
np.var(X)

# 9、描述数组中最大值和最小值差
np.ptp(X)

# 百分位数
q = np.linspace(0,100,5)
q = np.percentile(X,q)
np.cumsum(X,axis=1)
np.diff(X,axis=1)
np.prod(X,axis=1)

3、matplotlib绘图

# matplotlib绘图语法
import matplotlib.pyplot as plt
X = np.linspace(-10,10,100)
Y = X*2
# linestyle=:变成虚线
plt.plot(X,Y,color='green',linestyle=':')
plt.xlim(-5,10)
plt.ylim(-5,10)
plt.axis([-5,10,-5,10])
plt.xlabel('xlabel')
plt.ylabel('ylabel')
#plt.legend()
plt.title('111')
plt.show()

# 离散点
plt.scatter(X,Y)