【[402030j [401010 [105040 [101050] 矩阵的求和,平均值,方差。 import numpy as np from numpy import random asnr np.random.seed(42) A=np.random.randint(0,10,size=(4,5)) B=np.sum(A.axis 1) C=np.sum(A.axis =0) print(A) print(B) print(C) 输出的结果 1637461 926741 f377251 41751川 [26282418] [2213271816) 注意:axs参数是一个轴的序列时,对指定的所有轴进行求和运算。例如下面的程序对一个 形状为(2,3,4)的三维数组的第0和第2轴求和 mport numpy as np from numpy import random as nr R=np.sum(np.ones((2,3,4)).axis=(0,2)) 18.8.8.J 计算平均值的方法与求和的方法,基本上是一样的: np.random.seed(42) A=np.random.randint(0.10.size=(4.5)) B=np.mean(A,axis =1) C=np.mean(A,axis=0) print(A print(B) print(C) 输出的结果:
[[40 20 30] [40 10 10] [10 50 40] [10 10 50]] 矩阵的求和,平均值,方差。 import numpy as np from numpy import random as nr np.random.seed(42) A = np.random.randint(0,10,size=(4,5)) B = np.sum(A,axis = 1) C = np.sum(A,axis = 0) print(A) print(B) print(C) 输出的结果: [[6 3 7 4 6] [9 2 6 7 4] [3 7 7 2 5] [4 1 7 5 1]] [26 28 24 18] [22 13 27 18 16] 注意:axis 参数是一个轴的序列时,对指定的所有轴进行求和运算。例如下面的程序对一个 形状为(2,3,4)的三维数组的第 0 和第 2 轴求和。 import numpy as np from numpy import random as nr R = np.sum(np.ones((2,3,4)),axis = (0,2)) print(R) 输出结果: [8. 8. 8.] 计算平均值的方法与求和的方法,基本上是一样的。 import numpy as np from numpy import random as nr np.random.seed(42) A = np.random.randint(0,10,size=(4,5)) B = np.mean(A,axis = 1) C = np.mean(A,axis = 0) print(A) print(B) print(C) 输出的结果:
I637461 1926741 37725 [41751功 5.25.64.83.61 [5.53.256.754.54.1 Std和var分别计算数组的标准差和方差,有axis,out,dtype以及Keepdims等参数。方 差有两种定义:偏样本方差(biased sample variance)和无偏样本方差(unbiased sample variance 偏样本方差:sn2=1/n(yi-y2之和无样本方差sn2=1/(n-1)yi-y2之和 参数dof参数为0时,计算样本方差,为1时,计算无偏样本方差。 A=nr.normal(0.2.0.10000.101 B=np.var(A.axis=1.ddof=0) C=np.var(A,axis=1,ddof=1) print(np.mean(A) print(np.mean(Bj) print(np.mean(C)) 输出的结果: 0.002051298979986933 3.5821988923148957 3.9802209914609 正态分布的最大似然估计:如果有一个样本包含个随机数,并且知道它们符合正态分布 通过该样本可以估算出正态分布的概率密度函数的参数。所估算的那组正态分布函数最符合 给定的样本,就称为最大似然估计。 import numpy asnp from numpy import random asn def normal pdf(mean,var.x): return 1/np.sqrt(2*np.pi*var)*np.exp(-(x-mean)**2/(2*var)) nr.seed(42) data=nr.normal(0,2.0,size=10) mean,var=np.mean(data),np.var(data) var_range=np.linspace(max(var-4,0.1),var+4,100) p=normal_pdf(mean,var_range(:,None],data) p=np.product(p,axis=1) import pylab as pl pl.plot(var_range,p)
[[6 3 7 4 6] [9 2 6 7 4] [3 7 7 2 5] [4 1 7 5 1]] [5.2 5.6 4.8 3.6] [5.5 3.25 6.75 4.5 4. ] Std 和 var 分别计算数组的标准差和方差,有 axis,out,dtype 以及 Keepdims 等参数。方 差有两种定义:偏样本方差(biased sample variance)和无偏样本方差(unbiased sample variance) 偏样本方差: sn^2 = 1/n (yi-y)^2 之和 无样本方差 sn^2 = 1/(n-1) (yi-y)^2 之和 参数 ddof 参数为 0 时,计算样本方差,为 1 时,计算无偏样本方差。 import numpy as np from numpy import random as nr A = nr.normal(0,2.0,(10000,10)) B = np.var(A,axis=1,ddof=0) C = np.var(A,axis=1,ddof=1) print(np.mean(A)) print(np.mean(B)) print(np.mean(C)) 输出的结果: -0.002051298979986933 3.5821988923148957 3.980220991460995 正态分布的最大似然估计:如果有一个样本包含 n 个随机数,并且知道它们符合正态分布, 通过该样本可以估算出正态分布的概率密度函数的参数。所估算的那组正态分布函数最符合 给定的样本,就称为最大似然估计。 import numpy as np from numpy import random as nr def normal_pdf(mean,var,x): return 1/np.sqrt(2*np.pi*var)*np.exp(-(x-mean)**2/(2*var)) nr.seed(42) data = nr.normal(0,2.0,size=10) mean,var = np.mean(data),np.var(data) var_range = np.linspace(max(var - 4 , 0.1), var + 4,100) p = normal_pdf(mean,var_range[:,None],data) p = np.product(p,axis=1) import pylab as pl pl.plot(var_range,p)
pl.axvline(var,0,1.c="r") pl.show() 0 25 20 15 10 05 0.0 0 1 2 3 4 5 大小与排序 Min max minimum(二元最小值)maximum(二元最大值)ptp(最大值与最小值的差) Argmin (最小值的下标)argmax(最大值的下标)unraveindex 一维下标转换成多维下标 Sort(数组排序)argsort(计算数组排序的下标)lexsort(多列排序)partition(快速计算前 K位)argpartition(前k位的下标)median(中位数)percentile(百分位数)searchsorted (二分查找) from numpy import random as nr np.random.seed(42) A np.random.randint(0,10,size=(4,5)) max_pos_x=np.argmax(A,axis=1) max_pos_y-np.argmax(A,axis-0 print(A) print(max pos x) print(max_pos_y) idx=np.argmax(A,axis=1) line_max=A[np.arange(A.shape[0]),idx] print(line_max) 输出的结果: 63746 I926741 37725 【41751功 【20121 [12010
pl.axvline(var,0,1,c="r") pl.show() 大小与排序 Min max minimum(二元最小值)maximum(二元最大值)ptp(最大值与最小值的差) Argmin(最小值的下标)argmax(最大值的下标)unravel-index(一维下标转换成多维下标) Sort(数组排序)argsort(计算数组排序的下标)lexsort(多列排序)partition(快速计算前 K 位)argpartition(前 k 位的下标) median(中位数)percentile(百分位数)searchsorted (二分查找) import numpy as np from numpy import random as nr np.random.seed(42) A = np.random.randint(0,10,size=(4,5)) max_pos_x = np.argmax(A,axis=1) max_pos_y = np.argmax(A,axis=0) print(A) print(max_pos_x) print(max_pos_y) idx = np.argmax(A,axis=1) line_max = A[np.arange(A.shape[0]),idx] print(line_max) 输出的结果: [[6 3 7 4 6] [9 2 6 7 4] [3 7 7 2 5] [4 1 7 5 1]] [2 0 1 2] [1 2 0 1 0]
79771 通过idx选出每行的最大值 科学计算SCIPY 通用函数 拟合优化 线性代数 概率统计 首先来看看物理单位的转换: from scipy import constants as C print(C.c) print(C.h) print(C.physical_constants["electron mass"]) print(C.mile) print(C.inch) 299792458.0其空中的光速 6.62607004e-34普朗克常数 (9.10938356e-31.kg'.11e.381一个电子的质量 1609.34399999999981英里等于多少米 0.0254 1英寸等于多少米 0.453592369999999971磅等于多少千克 Scipy的special模块是一个非常完整的函数库,包含了基本数学函数,特殊函数以及Numpy 中出现的所有函数 print(S.gammaln(1000)) 输出的结果: 5905.220423209181 拟合优化 Scpy的optimize模块提供了许多数值优化的算法,可以完成非线性方程组求解,数据拟合, 函数最小值等进行简单介绍。 A非线性方程组的求解fsolve:问题描述 假定要对下面的方程进行求解 f1(u1,u2,u3)=0 f2(u1,u2,u3)=0 f3(u1,u2,u3)=0
[7 9 7 7] 通过 idx 选出每行的最大值 科学计算 SCIPY 通用函数 拟合优化 线性代数 概率统计 首先来看看物理单位的转换: from scipy import constants as C print(C.c) print(C.h) print(C.physical_constants["electron mass"]) print(C.mile) print(C.inch) print(C.pound) 输出的结果: 299792458.0 真空中的光速 6.62607004e-34 普朗克常数 (9.10938356e-31, 'kg', 1.1e-38) 一个电子的质量 1609.3439999999998 1 英里等于多少米? 0.0254 1 英寸等于多少米? 0.45359236999999997 1 磅等于多少千克? Scipy 的 special 模块是一个非常完整的函数库,包含了基本数学函数,特殊函数以及 Numpy 中出现的所有函数。 import scipy.special as S print(S.gammaln(1000)) 输出的结果: 5905.220423209181 拟合优化 Scipy 的 optimize 模块提供了许多数值优化的算法,可以完成非线性方程组求解,数据拟合, 函数最小值等进行简单介绍。 A 非线性方程组的求解 fsolve:问题描述 假定要对下面的方程进行求解: f1(u1,u2,u3) = 0 f2(u1,u2,u3) = 0 f3(u1,u2,u3) = 0
下列方程组求值: 5y1+3=0 4x02-2sinx1x2)=0 x1x2-1.5=0 直接解方程的程序如下: from math import sin,cos from scipy import optimize deff(x) x0,x1,X2=×.tolist(0 return[ 5*×1+3 4*x0*xo-2*sin(x1*x2). 1.5 1 result optimize.fsolve(f,[1,1,1]) print(result) print( print(f(resu 输出的结果: [-0.70622057-0.6 2.5 】 [0.0,-9.126033262418787e-14,5.329070518200751e-15 如果是采用雅可比矩阵的方法来求解:雅可比矩阵是一阶偏导数以一定方式排列的矩阵,它 给出了可微分方程与给定点的最优线性通近,因此类似于多元函数的通近。 from math import sin,cos from scipy import optimize deff(x): x0,x1,x2 x.tolist() return[ 5*1+3 4*x0*xo-2*sin(x1*x2) x1*x21.5 defj(x): xO.x1,x2=x.tolist() return[ 0,5,01, [8*x0,-2*x2*cosx1*x2,-2*x1*cosx1*x2l. [0,x2,x1]
下列方程组求值: 5x1 + 3 = 0 4x0^2 - 2sin(x1x2) = 0 x1x2 - 1.5 = 0 直接解方程的程序如下: from math import sin,cos from scipy import optimize def f(x): x0,x1,x2 = x.tolist() return [ 5*x1 + 3, 4*x0*x0 - 2*sin(x1*x2), x1*x2 - 1.5 ] result = optimize.fsolve(f,[1,1,1]) print(result) print("-------------------------") print(f(result)) 输出的结果: [-0.70622057 -0.6 -2.5 ] ------------------------- [0.0, -9.126033262418787e-14, 5.329070518200751e-15] 如果是采用雅可比矩阵的方法来求解:雅可比矩阵是一阶偏导数以一定方式排列的矩阵,它 给出了可微分方程与给定点的最优线性逼近,因此类似于多元函数的逼近。 from math import sin,cos from scipy import optimize def f(x): x0,x1,x2 = x.tolist() return [ 5*x1 + 3, 4*x0*x0 - 2*sin(x1*x2), x1*x2 -1.5 ] def j(x): x0,x1,x2 = x.tolist() return [ [0,5,0], [8*x0, - 2*x2*cos(x1*x2),-2*x1*cos(x1*x2)], [0,x2,x1]