import numpy as np
numpy的优点:
开源的数值计算扩展,类似matlab
存储和处理大型矩阵,比列表好
实用的线性代数、傅里叶变换和随机数生成函数
numpy和scipy配合使用更加方便。(scipy是一个用于数学、科学、工程领域的软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。)
-
一元线性回归
- 实验测定一系列的
,求
-
文件的存取
-
读文件到矩阵
Z=np.loadtxt ("C:\\DSDATA\\S-093790.txt")
Z就是一个矩阵
默认文件中列以空格间隔
若以逗号间隔:
-
x=np.loadtxt("D:\\data.txt",skiprows=1,delimiter=',')#skiprows表示跳过几行,delimiter去除掉什么符号 x=np.loadtxt("D:\\data.txt",usecols=[0,2],delimiter=',')#usecols表示用第几列
矩阵存入文件
-
np.savetxt(r"d:\123.txt",x)#将x矩阵存储到d:\123.txt文件中
格式化保存
np.savetxt(fname, X, fmt='格式串', delimiter=' ', newline='\r\n') fname为文件名,X输出矩阵,fmt为数据格式,delimiter是列分隔符,newline为换行符,一般使用\r\n。 np.savetxt("d:\\111.txt",y,fmt='%5.2f', delimiter='\t', newline='\r\n') #数据格式为宽度5位,保留2位小数。 用r转义时只需\
生成矩阵的便捷方法
-
生成元素为某数字的矩阵 ((m,n)) m行n列
B=np.zeros((2,3)) >>B:array([[ 0., 0., 0.], [ 0., 0., 0.]])
eye生成单位矩阵
-
X=np.eye(5,5) #生成一个5*5的单位阵(对角线上的数据为1 ,其余为0)
逆矩阵
-
一个n阶方阵A称为可逆的: AB=BA=E
B是A的逆矩阵
-
B=np.linalg .inv (A)
import numpy as np x=np.random.standard_normal((4,4)) xinv=np.linalg.inv(x) I=x.dot(xinv)
#全称:linear algebra inverse matrix
-
随机数矩阵
-
np.random.standard_normal((n,m))
生成n行m列,服从正太分布的随机数矩阵
如x=np.random.standard_normal((4,4))
-
矩阵转置
- B=A.T
-
矩阵的运算
- 矩阵与标量的运算在每个元素上进行加减乘除
- 矩阵与向量的运算指定在列上进行
-
加减运算: C=A+B 或 D=A-B
点乘:C=A.dot(B) 或 C=np.dot(A,B) 是线性代数乘
-
数乘:Z=X*Y 矩阵的对应元素相乘
-
乘方:
矩阵每个元素的乘方,形成新矩阵
A=np.array([[1,-1,0],[2,0,-2.0]]) B=A**2 >>B array([[1., 1., 0.],[4., 0., 4.]])
矩阵的形状
-
矩阵的行和列数
size = A.shape
size[0]是行数,size[1]是列数
-
两矩阵合并
-
X=np.array([[1,2,3.0],[4.0,5,6]])
>>> b=np.ones(2) #产生的是n*1的矩阵
>>> c=np.c_[b, X] # 列合并 np.r_[ ]是行
>>> c
array([[ 1., 1., 2., 3.], [ 1., 4., 5., 6.]])
-
矩阵分片
-
y=x[: , :2] 所有行的前两列组成y矩阵
z=x[:2, 2:]则选择前2行、最后2两列组成z矩阵
若某维度只有一个数字,只取该下标
一共两个维度,分片时,每个维度 start:end
维度间,逗号
Start忽略,取0;end略,最后
应用:crossvalidation
import numpy as np
a=np.random.standard_normal((9,2))
k=int(input('份数'))
n=len(a)//k # 每份3个样本;
if len(a)%k != 0:
k=k+1
print(a)
for part in range(k):
test=a[part*n:(part+1)*n] # 测试模型的一份样本
train1=a[0:part*n]; train2=a[(part+1)*n:]
train=np.r_[train1,train2] # 训练建模的样本
print(part); print(train)
指定索引选择
import numpy as np
a=np.random.standard_normal((9,4))
print(a)
xSel=[0,5,7]
ySel=[1,3]
b=a[xSel] # 选择指定行
b=b[:,ySel] # 再选择指定列
print(b)
b=a[xSel,ySel] # 不允许同时选择
矩阵函数
sum(元素和)、 std(标准偏差),mean(均值)
可指定按行或列操作:axis=0时,求列方向,axis=1时,求行方向
>>> x=np.array([[1,2,3],[5,6,7]])
>>> x.sum()
24
>>> x.sum(axis=0)
array([ 6, 8, 10])
>>> x.sum(axis=1)
array([ 6, 18])
计算预测值与真值的%误差
公式:abs(真值-预测)/真值*100
人工智能方法求线性回归模型
import numpy as np
import pandas as pd
X=np.array([150,153,154,155,156,157,158,159,160,162,164,166])
X = X[:,np.newaxis]
y=np.array([93,93,95,96,98,97,96,98,99,100,102,104])
from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X,y) #初始化模型并拟合数据
print(lr.coef_) #权重系数
print(lr.intercept_) #截距y=a+bx
predict_score=lr.score(X,y)
print('在训练集上的决定系数为{:.2f}'.format(predict_score))
new_X=np.array([[165]])
print("预测腿长:",lr.predict(new_X))