Python读取文件中的数据并根据数据求出拟合的方程--------------2019/9/7

读取文件中的数据并根据数据求出拟合的方程

import os
import sys
import os.path
#引入os.path
import numpy as np
import matplotlib.pyplot as plt

#————————————————————————————————————————————————————
#通过Python删除TXT文本的前11行:
file=open("eclipseCloud.txt")
#打开eclipseCloud.txt文件,前提是此文件和wen_jian_mu_lu.py文件在同一目录下,否则报错
a=file.readlines()
#读取所有行,并返回列表
data = []
if a[0].strip()=='# .PCD v0.7 - Point Cloud Data file format':
#得到file中的第一行,将其删去最后的换行符后与'# .PCD v0.7 - Point Cloud Data file format'字符串进行对比:
#如果相等,则表明.txt文件中汉字符串,需将字符串删去
    fout = open('new.txt', 'w')
    #以写的方式打开eclipseCloud.txt文件
    b=''.join(a[11:])
   #将a[11,:]即11行及其以后的数据的元素以指定的字符连接生成一个新的字符串b。
    fout.write(b)
   #将b写入new.txt
    file.close()
    #关闭已打开的文件eclipseCloud.txt
    fout.close()
    #关闭已打开的文件new.txt
    os.rename('eclipseCloud.txt','eclipseCloud_1.txt')
   #将文件eclipseCloud.txt重命名为文件eclipseCloud_1.txt
    os.rename('new.txt','eclipseCloud.txt')
    #将文件new.txt重命名为文件eclipseCloud.txt
    os.remove('eclipseCloud_1.txt')
    #以新的重命名为文件eclipseCloud.txt代替旧的
#——————————————————————————————————————————————————————————————————————

#*********************************************************************
#将文本中的数据转化为矩阵以便于求解系数:
file1=open("eclipseCloud.txt")
for line in file1.readlines():
      # readlines()读取所有的行并返回列表
    curline=line.strip().split(" ")
    #将每行的每个字符以空格为界线一个个分开,变成一个list,一个数字是一个list
    floatline=list(map(float,curline))
    #map()会根据提供的函数对指定序列做映射,故用map将curline中数据转化为float型
    data.append(floatline)
    #追加单个元素到data的尾部,.append()只接受一个参数,参数可以是任何数据类型,被追加的元素在data中保持着原结构类型
data.sort()
#data是list类型,所以用.sort()对data中的元素进行排序,行中的数据保持不变即:原来是一行,排序后还是一行,但第几列变了
data=np.mat(data)
#将data转化为矩阵类型
#**************************************************

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#删除误差(误差是通过看图得到的):
row1=data.shape[0]
#得到data的行数
print(row1)
if data[149,0]>100:
    data=np.delete(data,149,0)
#删除最后一行数据,因为有画出的散点图可知,此行数据是误差,应删去
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#求解拟合的方程的系数:
row=data.shape[0]
#求删去误差行后,矩阵的行数
print(row)
x1=data[...,0]
#提出data的第一列数据
y1=data[...,1]
# 提出data的第二列数据
print("x1的值:",end=" ")
print("x1:",x1)
print("y1的值:",end=" ")
print(y1)
min1=np.min(x1)
# 求x1中最小值
max1=np.max(x1)
# 求x1中最大值
min2=np.min(y1)
# 求y1中最小值
max2=np.max(y1)
# 求y1中最大值
plt.plot(x1,y1,'o')
x0=np.ones((row,1))
#构造单位矩阵,行数==x1的行数,列数是1
X1=np.power(x1,2)
#求x1的平方
X1=X1.reshape(row,1)
#令X1的行数==x1的行数,列数是1
X=np.hstack((X1,x1,x0))
#将X1,x1,x0以行合并的方式和成一个矩阵
print(X)
x=X.I
#求X矩阵的逆矩阵
solve=np.dot(x,y1)
#求系数,令X的逆矩阵与y1矩阵相乘
solve=solve.reshape(3,1)
#令solve的行数==3,列数是1
print(solve)
Y=np.dot(X,solve)
#求你拟合出的y的数值
plt.plot(x1,Y)
#画图
plt.show()
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值