- Python Numpy
- 一、数组
- 1. 创建
- np.array(list)
- np.ones(shape)/np.zeros(shape)
- np.arange(begin, end, stride)
- np.linespace(begin, end, count)
- np.random.radint(min, max, shape)
- 2. 属性
- 3. 方法
- 3.1 形状变换方法:reshape(shape), flatten()
- 3.2 统计方法:min, max, ptp, median, mean, std, var, sum
- 3.3 集合运算
- 3.4 相关系数计算与掩码数组
Numpy 包括了多种创建数组的方式
np.array(list)通过传入一个列表来初始化一个数组:
import numpy as np # 声明一个数组 arr = np.array([[1,2,3], [4,5,6]]) ''' 1 2 3 4 5 6 '''np.ones(shape)/np.zeros(shape)
生成所需形状的所有元素为 1(0) 的数组:
ones = np.ones((2,2)) ''' output 1 1 1 1 ''' zeros = np.zeros((3,3)) ''' output 0 0 0 0 0 0 0 0 0 '''np.arange(begin, end, stride)
根据所给区间和步长生成一个一维数组,默认从 0 开始,步长为1,其中:
- begin: 起始数值,选填
- end:截止数值,必填
- stride:步长,选填
range = np.arange(0, 10, 2) ''' output: 0 2 4 6 8 10 '''np.linespace(begin, end, count)
同样这个函数也是指定了一个区间,但是不同的是,linspace 第三个参数是指:从begin 开始到 end 中间等分的数量,即返回的是指定元素个数的数组,步长为区间长度对于指定元素个数的均分,例如:
ls1 = np.linspace(0, 10, 2) ls1.size() ''' output 0, 10 size: 2 ''' ls2 = np.linspace(0, 10, 6) ls2.size() ''' output 0, 2, 4, 6, 8, 10 size: 6 ''' ls3 = np.linspace(0, 10, 11) ls3.size() ''' output 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 size: 11 '''np.random.radint(min, max, shape)
当我们需要创建一个元素大小随机的数组时,可以通过这个随机数数组的方法生成:
rand = np.random.radint(0, 10, 3) ''' output 4 2 0 3 8 1 9 0 1 '''2. 属性
Numpy 的数组对象包含了几个非常有用的描述数组特征的属性:
- ndim:数组的维度
- size:数组大小,即包含的元素个数
- shape:数组的形状
- dtype:数组的类型
例如:
temp = np.ones((2,2)) ''' temp.ndim: 2 temp.size: 4 temp.shape: (2,2) temp.dtype: float '''3. 方法 3.1 形状变换方法:reshape(shape), flatten()
形状改变,可以调整数组形状,常用于将范围转换为所需形状的数组:
range = np.arange(0, 10, 3) # [0, 3, 6, 9], size: 4, shape: (1,4) range.reshape((2,2)) ''' output 0 3 6 9 ''' range.flatten() ''' output 0 3 6 9 '''3.2 统计方法:min, max, ptp, median, mean, std, var, sum
略 … Hugecolor{BROWN}略dots 略…
3.3 集合运算# 例 # a: 1,2,3,4,5,6 # b: 5,6,7,8,9 # 交集 numpy.intersect1d(a,b) ''' output 5, 6 ''' # 差集 numpy.sestdiff1d(a,b) ''' output 1, 2, 3, 4, 7, 8, 9 '''
3.4 相关系数计算与掩码数组从函数名称来看,显然,函数针对的是一维数组之间的交集计算,如果输入的数组维度不是一维,则此时函数会先对该数组进行 flatten 操作,统一化为一维数组之后进行计算。 setdiff1d 同理
已知相关系数计算:
ρ
=
C
o
v
(
X
,
Y
)
σ
X
,
σ
Y
rho=frac{Cov(X,Y)}{sigma_{X},sigma_{Y}}
ρ=σX,σYCov(X,Y)
又:
C
o
v
(
X
,
Y
)
=
E
(
X
Y
)
−
E
(
X
)
E
(
Y
)
Cov(X,Y)=E(XY)-E(X)E(Y)
Cov(X,Y)=E(XY)−E(X)E(Y)
则:
ρ
=
E
(
X
Y
)
−
E
(
X
)
E
(
Y
)
σ
X
σ
Y
rho=frac{E(XY)-E(X)E(Y)}{sigma_{X}sigma_{Y}}
ρ=σXσYE(XY)−E(X)E(Y)
当通过代码进行相关系数计算时,此时可以创建包含
X
,
Y
X,Y
X,Y 的两个数组 x 和 y,则
X
Y
XY
XY 为 x * y,则再根据前文数组的统计量成员函数可得:
# E(XY) e_xy = (x * y).mean() # E(X)E(Y) e_x_y = x.mean() * y.mean() # X 标准差 sigma_x = x.std() # Y 标准差 sigma_y = y.std()
最终可以计算得到相关系数:
corrcoef = (e_xy - e_x_y) / (sigma_x * sigma_y)
此时结合 Numpy 提供的相关系数矩阵计算函数:
np.corrcoef(x, y) ''' output 1 corr(x,y) corr(x,y) 1 '''
可得到对应的相关系数在对应的行列位置,对角线为自身相关系数,为 1 1 1



