快速生成一组环形数据

这篇具有很好参考价值的文章主要介绍了快速生成一组环形数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  sklearn是一个开源的机器学习库,支持不同种类的机器学习算法,并且提供了许多质量良好的数据集。假如我们想要得到一组环形数据集,借助sklearn的包很轻易就可以实现,不过换个角度思考,我们自己动手是否也可以生成一组数据,使之在散点图上环状分布;借助C++的random头文件以及一点高中数学知识,我们很快也可以打造属于自己的数据集。

快速生成一组环形数据

  简单回顾一下,ρ与x和y之间的关系,y=ρsin(θ),x=ρcos(θ)。这是第一象限的情况,对于其它象限,只需要注意角度和符号的关系便可。

#include <iostream>
#include <fstream>
#include <random>
#include <string>
#include <utility>
#include <cmath>

std::random_device rd;
std::mt19937 g(rd());
std::uniform_real_distribution dis(0.0, M_PI * 2);

std::pair<double, double> circleData(double radius) {
    double tolerance = radius / (30.0 + dis(g));
    int n;
    double d = dis(g);
    if (d < M_PI)
        n = 1;
    else 
        n = -1;

    double r = radius + n * tolerance * dis(g);
    double x, y;
    double sita = dis(g);
    double mapping = sita / (M_PI / 2);

    if (mapping < 1.0) {
        x = r * cos(sita);
        y = r * sin(sita);
    } else if (mapping < 2.0) {
        x = -r * cos(M_PI - sita);
        y = r * sin(M_PI - sita);
    } else if (mapping < 3.0) {
        x = -r * cos(sita - M_PI);
        y = -r * sin(sita - M_PI);
    } else {
        x = r * cos(2 * M_PI - sita);
        y = -r * sin(2 * M_PI - sita);
    }

    return std::pair<double, double>{x, y};
}

void generateData(const std::string& path, std::size_t n = 1000, double radius = 1000.0) {
    std::ofstream out{path};

    out << "X,Y\n";
    for (std::size_t i{}; i < n; ++i) {
        std::pair<double, double> pii = circleData(radius);
        std::string str = std::to_string(pii.first) + ',' + std::to_string(pii.second) + '\n';
        out << str;
    }
}

int main() {
    std::string str{};
    std::cin >> str;
    generateData(str);
}

  需要额外补充几点:1.生成的数据并不必完全呈环状,有稍微的偏差更加符合随机性,所以这里定义了tolerance变量,允许在半径范围内有一定的误差。2.生成的数据会写入csv格式的文件当中,而csv格式下的数据说白了就是一堆以逗号作为分割界限的字符串,后面用借助Python的pandas库便能很容易地对csv格式文件进行解析。3.为了确定随机生成的角度属于哪一象限,只需要除以(pi/2)即可判断,浮点数比较带来的精度丢失可接受。

  接下来打开Python的编辑器,只需要写入下列代码:

import pandas as pd
import matplotlib.pyplot as plt


def f():
    file = 'data.csv'
    data = pd.read_csv(file)

    x = data['X']
    y = data['Y']

    plt.scatter(x, y)
    plt.title('Circle Data')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.show()

if __name__ == '__main__':
    f()

快速生成一组环形数据

  这是在半径为10000时的效果,为了多作几组对比,我们分别选取半径为100,1000的图片进行测试。

快速生成一组环形数据

快速生成一组环形数据

  总结:效果看上去都还不错,不过并不一定任何时候都能满足需求,可以对代码当中的参数进行一定的调整,生成更符合预期的数据集。文章来源地址https://www.toymoban.com/news/detail-747062.html

到了这里,关于快速生成一组环形数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个开源的全自动视频生成软件MoneyPrinterTurbo

    只需提供一个视频 主题 或 ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 一:功能特性 完整的 MVC架构,代码 结构清晰,易于维护,支持 API 和 Web界面 支持视频文案 AI自动生成,也可以自定义文案 支持多种 高清

    2024年04月17日
    浏览(47)
  • Latte:一个类似Sora的开源视频生成项目

    前段时间OpenAI发布的Sora引起了巨大的轰动,最长可达1分钟的高清连贯视频生成能力秒杀了一众视频生成玩家。因为Sora没有公开发布,网上对Sora的解读翻来覆去就那么多,我也不想像复读机一样再重复一遍了。 本文给大家介绍一个类似Sora的视频生成项目:Latte。为什么说它

    2024年03月11日
    浏览(46)
  • 开源|用 Java 实现一个生成 Markdown 文本的工具

    公司的 IM 每天有许多机器人推送的消息,我也在使用,这个功能是好的,但是当我们想去发送一些格式优美的消息时,却要费许多功夫,主要来源于字符串拼接,如果要拼接出 Markdown 格式的那就更费力了,另外由拼接带来的是混乱的代码,为了解决这个痛点,我写了一个

    2023年04月15日
    浏览(42)
  • 一个基于Excel模板快速生成Excel文档的小工具

    DocumentGenerator是一个Excel快速生成工具,目标以后还能实现Word、pdf等的文件的生成。该程序独立运行,可通过HTTP接口调用其生成接口。 典型使用场景为如下: 使用者编写模板文件 使用者准备模板文件的填充JSON数据内容 使用者通过网络接口调用该程序服务完成模板数据自动

    2024年02月08日
    浏览(40)
  • 【jsDelivr】jsDelivr - 一个免费、快速、可靠的为JS和开源项目服务的CDN

    官网 jsDelivr 是一个提供含 JavaScript 库、 jQuery 插件、 CSS 框架、字体等 Web 上经常使用静态资源的服务,采用全球 CDN 加速,确保每一个地区的使用者都能得到最好的链接速度,大陆地区使用国内 CDN 加速 jsDelivr 可将不一样的 JavaScript 或 CSS 库集合在一块儿使用, jsDelivr 提供包

    2024年02月11日
    浏览(45)
  • 【opencv】示例-minarea.cpp 如何寻找一组随机生成的点的最小外接矩形、三角形和圆...

    此段代码的主要功能是:利用OpenCV库生成随机点集,并计算并展示这些点的最小外包矩形、三角形和圆形。用户可以通过按键重新生成不同的随机点集,或者按ESC/Q退出程序。程序中利用了OpenCV的随机数生成函数、绘图函数以及几何形状的计算函数。

    2024年04月14日
    浏览(51)
  • Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序

    Spring是一个开源的Java开发框架,它提供了一种快速、简单的方式来开发企业级应用程序。Spring的主要优点包括简化Java EE开发、提供依赖注入和面向切面编程等功能。以下是Spring的一些核心特性: 依赖注入(DI):Spring通过DI机制,将对象的依赖关系注入到应用程序中,简化了

    2024年02月03日
    浏览(74)
  • AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

    ✨ 1: AniPortrait 腾讯开源:根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架,专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频,也可以用来实现面部的再现(Face reenactment)。 地址:https://github.com/Zejun-Yang/AniPortrait ✨ 2: D

    2024年04月17日
    浏览(39)
  • JfreeChart生成饼图、环形图、柱状图、折线图最强工具,自己使用

    依赖: 以下是生成的图形案例: 以下是生成图片、表格数据、然后导出word文档的代码

    2024年02月16日
    浏览(40)
  • 开源大数据集群部署(六)Keytab文件生成

    作者:櫰木 Keytab文件用于在不输入密码的情况下对主体(用户或服务)进行身份验证。以下是创建Kerberos身份验证的步骤。 除了使用明文密码登录之外,Kerberos还可以使用keytab密码文件登陆,现在为testcuser创建它的keytab文件 这样就在当前执行目录下生成了testcuser.keytab文件 通

    2024年01月24日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包