在地质区划图上绘制伪震中

news2024/11/23 7:13:17
import numpy as np
import matplotlib.pyplot as plt
#matplotlib inline
from matplotlib import image
from matplotlib import pyplot as plt
import cv2
# 解析文件,按空格分割字段,得到一个浮点数字类型的矩阵
def loadDataSet(fileName):  
    dataMat = []              # 初始化一个空列表,文件的最后一个字段是类别标签
    fr = open(fileName)       # 读取文件
    for line in fr.readlines():   # 循环遍历文件所有行
        curLine = line.strip().split(' ')   # 切割每一行的数据
        fltLine = list(map(float, curLine))  # 映射所有的元素为 float(浮点数)类型
        dataMat.append(fltLine)   # 将数据追加到dataMat
    return dataMat       # 返回dataMat

# 计算欧几里得距离
def distEclud(vecA, vecB):
    return sqrt(sum(power(vecA - vecB, 2))) # 求两个向量之间的距离

# 构建聚簇中心,取k个(此例中为4)随机质心
def randCent(dataSet, k):
    n = shape(dataSet)[1]            #获取特征值数量:3列
    centroids = mat(zeros((k,n)))    #初始化质心为0,创建(k,n)个以零填充的矩阵k=4行,3列
    for j in range(n):               #循环遍历特征值
        #下面计算的分别是横坐标、纵坐标与类别标签
        minJ = min(dataSet[:,j])     #计算每一列的最小值
        maxJ = max(dataSet[:,j])     #计算每一列的最大值
        rangeJ = float(maxJ - minJ)  #计算每一列的范围值
        centroids[:,j] = minJ + rangeJ * random.rand(k, 1) #计算每一列的质心,并将值赋给centroids
    return centroids     #返回质心

def kMeans(dataSet, k, distMeans =distEclud, createCent = randCent):
    m = shape(dataSet)[0]#查看数据集行数100
    print(m)
    
    # clusterAssment包含两个列:一列记录簇索引值,第二列存储误差(误差是指当前点到簇质心的距离,后面会使用该误差来评价聚类的效果)
    clusterAssment = mat(zeros((m,2)))
    #centroids = randCent(dataSet, k)  # 创建质心,随机K=4个质心
    centroids = np.mat(loadDataSet('./after_label_training_center.txt'))  # 创建质心,随机K=4个质心
    clusterChanged = True   # 用来判断聚类是否已经收敛,启动初始循环
    
    while clusterChanged:
        clusterChanged = False;#只有全部的点都被分配完毕后才停止
        
        # 遍历所有数据找到距离每个点最近的质心,
        # 可以通过对每个点遍历所有质心并计算点到每个质心的距离来完成
        for i in range(m):#一共m行数据   
            minDist = inf;#无穷
            minIndex = 1;#任意值
                
            for j in range(k):#第j个质心
            # 计算数据点到质心的距离
            # 计算距离是使用distMeans函数给出的距离公式,默认距离函数是distEclud欧几里得距离
                distJI = distMeans(centroids[j,:], dataSet[i,:])#第i个数据点与第j个质心比较
                #如果距离比minDist(最小距离)还小,更新minDist(最小距离)和最小质心的index(索引)
                #这里第一个肯定是要更新的,因为任何值都比无穷大,要小
                if distJI < minDist:
                    minDist = distJI; minIndex = j  # 如果第i个数据点到第j个中心点更近,则将i归属为j簇
            # 如果任一点的簇分配结果发生改变,则更新clusterChanged为true.
            if clusterAssment[i,0] != minIndex:
                clusterChanged = True;  
            clusterAssment[i,:] = minIndex,minDist**2   # 更新簇分配结果为最小质心的index(索引),minDist(最小距离)的平方(误差)
        for cent in range(k):   # 重新计算中心点,遍历所有质心并更新它们的取值
            ptsInClust = dataSet[nonzero(clusterAssment[:,0].A == cent)[0]]   # 通过数据过滤来获得给定簇的所有点
            centroids[cent,:] = mean(ptsInClust, axis = 0)  # 计算所有点的均值,axis=0表示沿矩阵的列方向进行均值计算
    return centroids, clusterAssment    #返回所有的类质心与点分配结果     

def showCluster(dataSet,k,centroids,clusterAssment):
    m,n = dataSet.shape
    if n != 2:
        print("数据不是二维的")
        return 1
    #二维数据标准
    mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
    if k > len(mark):
        print("k值太大了")
        return 1
    #分类不太多
    # 绘制所有的样本
    for i in range(m):
        markIndex = int(clusterAssment[i,0])
        plt.plot(dataSet[i,0],dataSet[i,1],mark[markIndex])#数据点形状颜色
 
    mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb']#质心与形状颜色
    # 绘制质心
    for i in range(k):
        plt.plot(centroids[i,0],centroids[i,1],mark[i],markersize=13)
    plt.show()


#datMat1 = np.mat(loadDataSet('./data_epi_no_label.txt'))

datMat1 = np.mat(loadDataSet('./nolabel_expand.txt'))
datMat = np.mat(loadDataSet('./data_epicenter_labels.txt'))
k = 4

from numpy import *
centroids,clusterAssment = kMeans(datMat,k)
print('带标签训练质心:')
print(centroids)
centroids1,clusterAssment1 = kMeans(datMat1,k)
print('b不带标签训练质心:')
print(centroids1)

# to read the image stored in the working directory
data = image.imread('地图.png')
plt.figure(1)
plt.imshow(data,extent=(0, data.shape[1], 0, data.shape[0]))

x = list((datMat1)[:,0])
print(x)
y = list((datMat1)[:,1])
plt.scatter(x, y,c='red', s=10,)
'''
showCluster(datMat[:,0:2],k,centroids,clusterAssment)
plt.figure(2)
showCluster(datMat1[:,0:2],k,centroids1,clusterAssment1)
'''
plt.show()


 然后用聚类的方法求实际最大可能的震中位置即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/609602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python办公自动化:优化SEO工作效率的关键

Python办公自动化&#xff1a;优化SEO工作效率的关键 随着互联网的不断发展&#xff0c;SEO已经成为了许多企业在网络中展示自己的必备手段。然而&#xff0c;SEO工作需要大量重复性、繁琐的操作&#xff0c;如关键词排名、竞争对手分析、数据收集等&#xff0c;这些工作占据了…

一文说透ES6中的箭头函数表达式

一 总述 ​箭头函数表达式的语法比函数表达式更简洁&#xff0c;并且没有自己的this&#xff0c;arguments&#xff0c;super或new. target。箭头函数表达式更适用于那些本来需要匿名函数的地方&#xff0c;并且它不能用作构造函数。 二 详细 1 1个或多个参数 (param1, par…

【数据结构每日一题】队列——用栈实现队列

[数据结构习题]队列——用栈实现队列 &#x1f449;知识点导航&#x1f48e;&#xff1a;【数据结构】栈和队列 &#x1f449;[王道数据结构]习题导航&#x1f48e;&#xff1a; p a g e 85.3 page85.3 page85.3 本节为栈和队列的综合练习题 题目描述&#xff1a; &#x1f…

【AI绘图】五、stable diffussion模型的介绍与使用

1. 下载模型 主流模型下载网站&#xff1a; 1&#xff09;Hugging face 是一个专注于构建、训练和部署先进开源机器学习模型的网站&#xff1a; https://huggingface.co/ 2&#xff09;Civitai 是一个专为 Stable Diffusion AI 艺术模型设计的网站&#xff1a; https://civi…

Python数据分析script必备知识(四)

Python数据分析script必备知识(四) 1.保留最近N天的日志 1.批量创建多个文件 首先,为演示方便,在指定文件夹目录下用下面代码批量新建多个log文件 """ 批量创建多个文件 """ import os file_path = os.path.join(os.getcwd(),LOG) # 如果不…

「详细教程」使用git将本地项目上传至Github仓库(MacOS为例)

前言&#xff1a;最近需要将自己的代码开源至自己的Github仓库&#xff0c;然而发现并没有一键上传文件夹的选项&#xff0c;于是参考现有教程进行了实践&#xff0c;成功✌️以下是详细步骤。 Tips&#xff1a;在文章录用之后&#xff0c;小伙伴们可以选择将自己的代码开源&am…

QMessageBox信息模态对话框详细使用教程,对象创建栈和指针类型,对话框的风格样式设置,不要浪费实时间自己封装了,图文并茂,看图说话。

QMessageBox 界面设计图展示效果【1】PC端使用QMessageBoxinformation &#xff08;常规信息&#xff09;warning &#xff08;警告消息&#xff09;critical &#xff08;错误信息&#xff09;about (关于信息&#xff0c;无按钮)question &#xff08;问题信息&#xff1f;&a…

Android开发 LogDog (日志狗)V2.0.0

目录 一、简介 二、使用推荐 1、初始化LogDog 2、运行中如何更改初始化时的配置&#xff1f; 三、更改 四、新功能 1、Log过滤 2、自定义打印 3、提供占位符式打印 一、简介 LogDog V1.0 版本https://blog.csdn.net/Ym_quiet/article/details/130453232?spm1001.2014…

javascript基础二十六:JavaScript中如何实现函数缓存?有哪些应用场景?

一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 const add (a,b) > ab; const calc memoize(add); // 函数缓存 calc(1…

Linux邮件发送教程:深入了解mail命令

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文是专栏【linux基本功-基础命令实战】的第59篇文章。 专栏地址&#xff1a;[linux基本功-基础命令专栏] &#xff0c; 此专栏是沐风晓月对Linux常用命令的汇总&#xff0c;希望能够加深自己的印象&am…

Java进行公众号开发的常见使用场景及解决方案

Java进行公众号开发的常见使用场景解决方案 文章简介 本文总结了本人在开发过程中遇到的有关于微信开发的诸多常见功能&#xff0c;这些问题在网上找都是零散的回答&#xff0c;所以再此总结一下&#xff0c;方便后续开发。如果有错误之处&#xff0c;还望批评指出&#xff0…

使用Kaggle GPU资源免费体验Stable Diffusion开源项目

使用Kaggle GPU资源免费体验Stable Diffusion开源项目 前言相关介绍Stable Diffusion Kaggle开源项目编辑并复制项目运行项目打开网址&#xff0c;即可体验 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Y…

javascript基础二十五:说说你对函数式编程的理解?优缺点?

一、是什么 函数式编程是一种"编程范式"&#xff08;programming paradigm&#xff09;&#xff0c;一种编写程序的方法论 主要的编程范式有三种&#xff1a;命令式编程&#xff0c;声明式编程和函数式编程 相比命令式编程&#xff0c;函数式编程更加强调程序执行…

C SS复习笔记

1.img标签 img的src属性是图片显示不出来时显示的文字 ing的title属性是光标放到图片上&#xff0c;提示的文字 2.a标签 a标签的target属性表示打开窗口的方式&#xff0c;默认的值是_self表示当前窗口的打开页面&#xff0c;_blank表示新窗口打开页面。 a标签的href链接分…

2023.06.04 学习周报

文章目录 摘要文献阅读1.题目2.背景3.方案4.本文贡献5.模型5.1 图注意力形式5.2 superGAT 6.实验7.结论 有限元数学建模深度学习1.高斯扩散2.原理 总结 摘要 This week, I read a computer science about GNN. At present, the attention mechanism of graph neural network i…

Go Web下GORM框架使用(二)

〇、前言 本文将会写一个前后端分离的的小项目&#xff0c;本文将会只实现后端。 一、定义全局变量与模型 本文需要一个数据库&#xff0c;因此将这个数据库定义为全局变量将会非常轻松。 var (DB *gorm.DB )type Todo struct {ID int json:"id"Title s…

【C#图解教程】第六章 方法(下)

输出参数 函数的输出只有返回值有时不太够&#xff0c;此时需要用到输出参数&#xff0c;用修饰词out声明 输出参数的要求与引用参数类似&#xff0c;需要是变量&#xff0c;此外&#xff0c;输出参数也是实参的别名&#xff0c;指向堆中同一对象。 输出参数与引用参数的不同在…

【实用篇】Elasticsearch03

文章目录 分布式搜索引擎031.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.…

【人工智能】— Support Vector Machines 支持向量机

【人工智能】— Support Vector Machines 支持向量机 支持向量机概述支持向量机支持向量机原理介绍分类间距&#xff08;Classification Margin&#xff09; 支持向量机概述 找到使间隔最大化的超平面>B1比B2更好 支持向量机 研究起因&#xff1a;如何找到最优的切分面 分…

制作酷炫可视化大屏利器--分享10种比较流行的开源免费的图表库

在开发可视化项目的过程中往往涉及到可视化图表, 多酷炫的报表, 大屏, 都用了非常多的图表, 接下来我和大家分享一些比较流行的开源免费的图表库. 分享10种比较流行的开源免费的图表库 1&#xff0c;Frappe Charts2&#xff0c;Recharts3&#xff0c;Protovis4&#xff0c;dygr…