numpy矩阵计算

import numpy as np

numpy的优点:

开源的数值计算扩展,类似matlab

存储和处理大型矩阵,比列表好

实用的线性代数、傅里叶变换和随机数生成函数

numpy和scipy配合使用更加方便。(scipy是一个用于数学、科学、工程领域的软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。)

  1. 一元线性回归

  • y=a_0+a_1x
  • 实验测定一系列的(x_i,y_i),求a_0,a_1
  • 文件的存取

  1. 读文件到矩阵

    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))

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值