【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图
vis.js使用之vis-timeline使用攻略,vis-timeline实现时间轴、甘特图
- 1、vis-timeline简介
- 2、安装插件及依赖
- 3、简单示例
- 4、疑难问题集合
- 1. 中文zh-cn本地化
- 2. 关于自定义class样式无法被渲染
- 3. 关于双向数据绑定
vis.js是一个基于浏览器的可视化库,它提供了多个组件,包括DataSet, Timeline, Network, Graph2d和Graph3d。该库具有易用性、能够处理大量动态数据和允许数据操作和交互的特点。
1、vis-timeline简介
vis-timeline
时间轴是一个交互式可视化图表,用于实时可视化时间数据。数据项可以只与某个时间点关联,也可以有开始和结束日期(即一个时间范围)。vis-timeline可以通过拖拽和滚动时间轴自由移动和缩放。可以在时间轴中创建、编辑和删除数据项目。轴上的时间尺度是自动调整的,支持从毫秒到年的尺度。
vis-time时间轴使用常规HTML DOM
呈现时间轴和放在时间轴上的项目,这样的好处就是可以使用自定义css样式进行灵活定制。
Timeline | 地址 |
---|---|
vis.js官网 | https://visjs.org/ |
vis-timeline官方英文文档 | https://visjs.github.io/vis-timeline/docs/timeline/ |
vis-timeline官方示例 | https://visjs.github.io/vis-timeline/examples/timeline/ |
vis-timeline的github源码 | https://github.com/visjs/vis-timeline |
可实现效果如下:纵向可以分组,横向可以是时间轴,每个item项目可以自定义内容与样式。
2、安装插件及依赖
// vis-timeline包
cnpm install -S vis-timeline// vis.js提供的可以实现数据双向绑定的包
cnpm install -S vis-data// 实现时间轴中文的moment.js库的包
cnpm install -S moment
3、简单示例
<template><div class="bindNurseToRoom-container"><!-- 时间轴-绑定元素 --><div ref="timelineRef" id="timeline" class="bindNurseToRoom-container"></div></div>
</template><script setup lang="ts" name="bindNurseToRoom">
import { onMounted, ref, watch, nextTick, reactive, defineAsyncComponent } from 'vue';
import "vis-timeline/styles/vis-timeline-graph2d.min.css";
import { DataSet } from 'vis-data'; // 为timeline提供双向数据绑定,加快渲染速度
import { Timeline } from "vis-timeline"; //standalone,peer不同的包装方式
import moment from 'moment';
import "moment/dist/locale/zh-cn.js";
import { ElMessage, ElMessageBox } from 'element-plus';
import { useOperatingRoomApi } from '/@/api/room/operatingRoom';
import { useOperationScheduleStore } from '/@/stores/operationScheduleStore';
const _useOperationScheduleStore = useOperationScheduleStore();// 引入组件
const BindNurseToRoomDialog = defineAsyncComponent(() => import('./bindNurseToRoomDialog.vue'));const timelineRef = ref(null);
const bindDialogRef = ref();
// 定义父组件传过来的值
const props = defineProps({// 当前操作时间operateTime: {type: String,default: () => '',},// 配置项config: {type: Object,default: () => {},},
});
const curOperateTime = ref(''); // 当前操作日期格式化的字符串 或 undefined 或 ""let dataList:any = new DataSet([// {// id: 1,// content: "手术1",// start: "2023-04-07 08:00",// end: "2023-04-07 10:00",// group: "5a92fde514c2c842f680885b1d31b9b8",// style: "color: white; background-color: #1abc9c;",// idCard: "123456",// patientName: "李秀莲",// doctorName: "李莲",// anaesthesiaType: "局部",// },// {// id: 2,// content: "手术2",// start: "2023-04-06 10:00",// end: "2023-04-06 12:00",// group: "手术室1",// style: "color: white; background-color: #2ecc71;",// idCard: "12346",// patientName: "李秀",// doctorName: "李莲",// anaesthesiaType: "局部",// },// {// id: 3,// content: "手术3",// start: "2023-04-06 08:30",// end: "2023-04-06 09:30",// group: "手术室2",// style: "color: white; background-color: #3498db;",// idCard: "1456",// patientName: "莲",// doctorName: "李",// anaesthesiaType: "局部",// },// {// id: 4,// content: `<div style="display:block;height:100px;background:red;">// 123123123213// </div> `, //content接收字符串类型的文本或html// start: "2023-04-06 11:00",// end: "2023-04-06 14:00",// group: "手术室2",// style: "color: white; background-color: #9b59b6;",// idCard: "1236",// patientName: "李的",// doctorName: "李莲时",// anaesthesiaType: "局部",// },// {// id: 5,// content: `<div style="display:block;height:100px;background:red;">手术5</div> `,// start: "2023-04-06 06:30",// end: "2023-04-06 10:10",// group: "手术室5",// className:'icu',// editable: false, // 给某个特定的设置为不可编辑// idCard: "156",// patientName: "李秀消",// doctorName: "李莲",// anaesthesiaType: "局部",// },
]);const state:any = reactive({groups: null, // 手术室分组-new DataSet()格式的数据集timeline: null, // 手术室当前排班时间轴-new DataSet()格式的数据集
});// 监听当前操作日期变化
watch(() => props.operateTime,(newValue: any) => {if (newValue) {curOperateTime.value = newValue; // 保存当前操作日期到变量中,以便以后使用。nextTick(async () => {if(state.timeline){// state.timeline.setItems([], { clearNetwork: false });// state.timeline.destroy(); // 销毁时间轴} await getOperationRoom();await renderTimeLine(); // 渲染时间轴state.timeline.redraw();});}},{ immediate : true } //在组件初次加载的时候执行
);onMounted(async () => {state.timeline = new Timeline(timelineRef.value as unknown as HTMLElement, //document.getElementById("timeline") as HTMLElement, dataList, {locale: 'zh-cn', //moment.locale('zh-cn'), // 时间轴国际化editable: {add: true, // 双击添加新项-add new items by double tappingupdateTime: true, // 水平拖拉项目-drag items horizontallyupdateGroup: true, // 从一个分组拖拽到另一个分组-drag items from one group to anotherremove: true, // 通过右上角按钮删除项目-delete an item by tapping the delete button top right// overrideItems: false // allow these options to override item.editable},selectable: true,// height: '730px', // 时间轴高度minHeight: 400, // timeline表格的最小高度maxHeight: 750, // timeline表格的最大高度groupHeightMode: 'fixed', // 指定分组高度: 自动auto, fixed固定, fitItems适应项目stack: false, // ture则不重叠verticalScroll: true, // 竖向滚动orientation: 'top', // 时间轴位置showCurrentTime: true, // 显示当前时间zoomKey: "ctrlKey", // 缩放按键zoomMax: 1000 * 60 * 60 * 24,zoomMin: 1000 * 60 * 30,moment: function(date:any) {return moment(date).locale('zh-cn'); //vis.moment(date).utcOffset('+08:00');},// 显式将此选项设置为true以完全禁用Timeline的XSS保护xss: {disabled: true,},//可以提供模板处理程序。(或许可以直接放插槽?待测试)//此处理程序是一个函数,接受项的数据作为第一个参数,项元素作为第二个参数,编辑后的数据作为第三个参数,并输出格式化的HTML:template: function (sourceData:any, targetElement:any, parsedData:any) {console.log('parsedData: ', parsedData);targetElement.className = 'custom-item-template-class'; // 将自定义class写在className属性中return `<div class="custom-item ${sourceData.customClassName}"><div class="top"><span>${moment(sourceData.start).format('YYYY-MM-DD HH:mm:ss').split(' ')[1]}-${moment(sourceData.end).format('YYYY-MM-DD HH:mm:ss').split(' ')[1]}</span> <span>${sourceData.doctorName}</span></div><div class="center-box"><div class="info"><span>${sourceData.patientName}</span> <span>${sourceData.idCard}</span> <span>${sourceData.sex?'男':'女'}</span> <span>${sourceData.age}岁</span></div><h3>${sourceData.content}</h3></div><div class="nurse-box"><span>${ sourceData?.selectedNurse?.xshs1.name ? sourceData.selectedNurse.xshs1.name :'---' }</span><span>${ sourceData?.selectedNurse?.xhhs1.name ? sourceData.selectedNurse.xhhs1.name :'---' }</span></div><div class="bottom-box"><h4>${sourceData.anaesthesiaType}</h4></div></div>`;},tooltip: {followMouse: false,template: (originalItemData:any, parsedItemData:any) => {console.log('hover-parsedItemData: ', parsedItemData);return `<div><p><span>开始时间:</span><span>${moment(originalItemData.start).format('YYYY-MM-DD HH:mm:ss')}</span></p><p><span>结束时间:</span><span>${moment(originalItemData.end).format('YYYY-MM-DD HH:mm:ss')}</span></p><p><span>手术内容:</span><span>${originalItemData.content}</span></p></div>`}},// onAdd(item, callback)在将要添加新项时触发。如果未实现,将使用默认文本内容添加该项。onAdd: (originalItemData:any, callback:any) => {debuggerconsole.log('新增originalItemData: ', originalItemData);if (originalItemData.id) {originalItemData.customClassName = 'un-submit'; // 未提交状态的样式callback(originalItemData); // 成功返回 这行相当于调用了dataList.add(originalItemData)}else {callback(null); // 失败取消}},// onDropObjectOnItem(objectData,Item)在将对象放入现有时间轴项时触发。// 当拖动数据中包含target:'item'的对象被放入时间轴项时触发回调函数。onDropObjectOnItem: function (objectData:any, item:any) {debuggerif (!item) {ElMessage({message: '请拖动护士到对应的手术项目中',type: 'warning'})return;}onDropToItem(objectData, item);},// onUpdate(item,callback)在项目即将更新时触发(双击item时)。此函数通常会显示用户更改项目的对话框。如果不执行,什么都不会发生。// 示例:https://visjs.github.io/vis-timeline/examples/timeline/editing/editingItemsCallbacks.htmlonUpdate: function (item:any, callback:any) {if (item.id) {callback(item); // send back adjusted itembindDialogRef.value.openDialog(item); // 打开弹窗}else {callback(null); // cancel updating the item}},// 当项目被移动时重复触发的回调函数。仅在selectable和editable.updateTime或editable.updateGroup选项都设置为true时才适用onMoving: function (item:any, callback:any) {console.log('item: ', item);item.moving = true;callback(item);},// 当项目即将被删除时触发onRemove(item, callback)。如果未实现,该项将始终被删除。onRemove: (item:any, callback:Function) => {onDeleteByItemType(item,callback);},});
});// 获取医院手术室信息
const getOperationRoom = async () => {let { data } = await useOperatingRoomApi().selectAdministrativeOffice();if(data.length){let temp = data.map((item:any) => {return {...item,content: item.administrativeOfficeCard,style: "color: #fff; background: #5E8DFF;",}}).sort((a:any, b:any) => {return a.content - b.content});state.groups = new DataSet(temp);}
}// 渲染时间轴timeline = new Timeline(container, items, groups, options);
const renderTimeLine = async () => {// 清空数据集// dataList.clear();dataList = new DataSet([]);// 获取当天已经排班的数据await getScheduledData();// 设置setItemsstate.timeline.setItems(dataList);// 更新配置选项state.timeline.setOptions({min: moment(curOperateTime.value + ' 7:00:00').format('YYYY-MM-DD HH:mm:ss'), // 设置时间轴可见范围的最小日期max: moment(curOperateTime.value).endOf('day').format('YYYY-MM-DD HH:mm:ss'), // 设置时间轴可见范围的最大日期groupTemplate: (groupData:any, element:any) => {element.className = 'custom-group-template-class'; // 将自定义class写在className属性中return `<div class="group" title="${groupData.description}"><span class="group-id">${groupData.content}</span><span class="group-name">${groupData.administrativeOfficeName}</span></div>`;},});// 跳转到当前时间轴state.timeline.moveTo(curOperateTime.value);// 设置分组state.timeline.setGroups(state.groups);// 打印当前数据dataList.forEach((element: any) => {console.log('---------dataList: ', element);});
}</script><style scoped lang="scss">
.bindNurseToRoom-container {width: 100%;position: relative;
}// vis-timeline样式
:deep(#timeline){.vis-top{background-color: #90e0db9c;.vis-even,.vis-odd{border-left: 1px solid;}}// (此项目必须设置)自定义group分组样式.custom-group-template-class{height: 160px;width: 80px;display: flex;flex-direction: column;align-items: center;justify-content: center;.group{display: flex;flex-direction: column;justify-content: center;align-items: center;.group-id{font-size: 22px;}.group-name{font-size: 14px;margin-top: 10px;}}}// (此项必须设置)自定义item样式.custom-item-template-class{// color: #fff;.custom-item {.top{font-size: 18px;font-weight: bold;color: #5E8DFF;border-bottom: 1px dashed #C4C4C4;}.center-box{padding: 5px;}.nurse-box{display: flex;flex-direction: row;flex-wrap: wrap;justify-content: space-around;span{width: 40%;height: 30px;padding: 5px;border: 1px dashed #5E8DFF;border-radius: 5px;text-align: center;}}.bottom-box{padding: 5px;}}// 未提交状态的样式.un-submit{border: 2px solid #698df0;padding: 5px;}.ed-submit{border: 2px solid #efb03f;padding: 5px;}}// 使用自定义class实现不同手术状态.vis-item.icu {color: white;background-color: rgb(228, 210, 93);border-color: darkred;height: 100px;}
}// groups样式
:deep(.group-icu){background-color: rgba(244, 176, 59, 0.2);
}
</style><!--
为啥我的template中的自定义的class并没有被渲染到元素中?
你的自定义class选择器写错了:如果在template中自定义了class,但是并没有在CSS样式表中定义,那么这个class将不会生效。
请检查你的CSS样式表中是否已经定义了相应的类选择器,或者将class直接写在style属性中。vis-timeline对class属性进行了过滤:vis-timeline默认会对content和className等属性进行过滤,以避免XSS攻击。
如果你的class名称被视为可疑字符,那么它将被自动过滤掉。你可以通过在options选项中增加content属性的设置,来打开这个过滤功能:vis-timeline缓存了渲染数据,导致更新不及时:有时候,即使你已经在代码中正确设置了class属性,但是图表仍然没有反应出来。
这可能是因为vis-timeline缓存了渲染数据,需要手动调用timeline.redraw()方法来更新图表。
你可以在修改了item对象的class之后,手动调用timeline.redraw()方法,以更新图表。
-->
4、疑难问题集合
1. 中文zh-cn本地化
import moment from 'moment';
// 需要引入下方这个文件
import "moment/dist/locale/zh-cn.js";
网上说的在配置项options中引入locale: moment.locale('zh-cn')
无法实现本地化
2. 关于自定义class样式无法被渲染
写了自定义样式后,发现没有在元素中渲染出对应的class,原因有两点:
- vis-time本身为了防止
xss
攻击,自动过滤了你写的样式类。需要在options中配置打开xss: {disabled:true,},
- 你写的样式类需要通过
:v-deep()
渲染到界面,不写对应的样式,只写class类名
是无法渲染class名字
的
3. 关于双向数据绑定
需要使用let dataList = new DataSet([ ]);
官网真的写的挺详细的,不得不说国外这种开源网站确实非常给力。
有啥疑问可以一起交流哦
相关文章:

【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图
vis.js使用之vis-timeline使用攻略,vis-timeline实现时间轴、甘特图1、vis-timeline简介2、安装插件及依赖3、简单示例4、疑难问题集合1. 中文zh-cn本地化2. 关于自定义class样式无法被渲染3. 关于双向数据绑定vis.js是一个基于浏览器的可视化库,它提供了…...

机器学习——数据处理
机器学习简介 机器学习是人工智能的一个实现途径深度学习是机器学习的一个方法发展而来 机器学习:从数据中自动分析获得模型,并利用模型对未知数据进行预测。 数据集的格式: 特征值目标值 比如上图中房子的各种属性是特征值,然…...

多种文字翻译软件-翻译常用软件
整篇文档翻译软件 整篇文档翻译软件是一种实现全文翻译的自动翻译工具,它能够快速、准确地将整篇文档的内容翻译成目标语言。与单词、句子翻译不同,整篇文档翻译软件不仅需要具备准确的语言识别和翻译技术,还需要考虑上下文语境和文档格式等多…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK将相机图像数据用二进制的方式保存到本地(C)Baumer工业相机Baumer工业相机将图像保存为二进制图像的技术背景代码分析第一步:先转换Byte*图像为二进制图像第二步:在回调函数里进行Buf…...

JavaScript模块的导出和导入之export和module.exports的区别
export和module.exports (需要前面的export没有“s”,后面的module.exports 有“s”) 使用两者根本区别是 **exports **返回的是模块函数 **module.exports **返回的是模块对象本身,返回的是一个类 使用上的区别是exports的方法可以直接调用module.exports需要new…...

基于朴素贝叶斯分类器的钞票真伪识别模型
基于朴素贝叶斯分类器的钞票真伪识别模型 内容 本实验通过实现钞票真伪判别案例来展开学习朴素贝叶斯分类器的原理及应用。 本实验的主要技能点: 1、 朴素贝叶斯分类器模型的构建 2、 模型的评估与预测 3、 分类概率的输出 源码下载 环境 操作系统…...

【Python】【进阶篇】二十二、Python爬虫的BS4解析库
目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号࿰…...

UDS统一诊断服务【五】诊断仪在线0X3E服务
文章目录前言一、诊断仪在线服务介绍二、数据格式2.1,请求报文2.2,子功能2.3,响应报文前言 本文介绍UDS统一诊断服务的0X3E服务,希望能对你有所帮助 一、诊断仪在线服务介绍 诊断仪在线服务比较简单,其功能就是告诉服…...

我的创作纪念日:Unity CEO表示生成式AI将是Unity近期发展重点,发布神秘影片预告
PICK 未来的AI技术将会让人类迎来下一个生产力变革,这其中也包括生成型AI的突破性革新。各大公司也正在竞相推出AIGC工具,其中微软的Copilot、Adobe的Firefly、Github的chatGPT等引起了人们的关注。然而,游戏开发领域似乎还没有一款真正针对性…...

秩亏自由网平差的直接解法
目录 一、原理概述二、案例分析三、代码实现四、结果展示一、原理概述 N = B T P B N=B^TPB N=<...

大数据开发必备面试题Spark篇合集
1、Hadoop 和 Spark 的相同点和不同点? Hadoop 底层使用 MapReduce 计算架构,只有 map 和 reduce 两种操作,表达能力比较欠缺,而且在 MR 过程中会重复的读写 hdfs,造成大量的磁盘 io 读写操作,所以适合高时…...

C ++匿名函数:揭开C++ Lambda表达式的神秘面纱
潜意识编程:揭秘C Lambda表达式的神秘面纱 Subconscious Programming: Unveiling the Mystery of C Lambda Expressions 引言:Lambda表达式的魅力 (The Charm of C Lambda Expressions)Lambda表达式简介与基本概念 (Introduction and Basic Concepts of …...

AOP使用场景记录总结(缓慢补充更新中)
测试项目结构: 目前是测试两个日志记录和 代码的性能测试 后面如果有其他的应用场景了在添加.其实一中就包括了二,但是没事,多练一遍 1. 日志记录 比如说对service层中的所有增加,删除,修改方法添加日志, 记录内容包括操作的时间 操作的方法, 方法的参数, 方法所在的类, 方法…...

FPGA基于XDMA实现PCIE X4的HDMI视频采集 提供工程源码和QT上位机程序和技术支持
目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利:工程代码的获取1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI …...

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析
查看原文>>>ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析 目录 专题一、空间数据获取与制图 专题二、ArcGIS专题地图制作 专题三、空间数据采集与处理 专题四、遥感数据处理与应用 专题五、DEM数据…...

怎么找回回收站里已经删除的文件
作为忙忙碌碌的打工人,电脑办公是在所难免的,而将使电脑存储着大量的数据文件,不少小伙伴都养成了定期清理电脑的习惯。而清理简单快捷的方法,无疑是直接把文件拖进回收站里。再一键清空,清理工作就完成了。但如果发现…...

Spring Boot、Cloud、Alibaba 版本说明
Spring Boot、Cloud、Alibaba 版本说明 一、毕业版本依赖关系(推荐使用) 由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,为了同时满足存…...

软件测试入门第一步:编写测试报告
什么是测试报告? 1、说明:是指把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。 ps. 【测试过程和测试结果的分析报告,以及上线…...

【Vue】vue中的路由导航守卫(路由的生命周期)
文章目录全局前置守卫可选的第三个参数 next全局解析守卫router.beforeResolve全局后置钩子路由独享的守卫组件内的守卫可用的配置 API使用组合 API完整的导航解析流程正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入…...

NumPy 基础知识 :6~10
原文:Numpy Essentials 协议:CC BY-NC-SA 4.0 译者:飞龙 六、NumPy 中的傅立叶分析 除其他事项外,傅立叶分析通常用于数字信号处理。 这要归功于它在将输入信号(时域)分离为以离散频率(频域&am…...

实现vue的条件渲染
我的需求是根据设备不同的状态 渲染不同的标签。设备状态用device_State表示。 在线上面是一个vue的标签,我有一个数据state ,如何让这个标签根据数据的取值 ,修改内容,如state1时,标签修改为离线 要根据数据的取值动态…...

第四章 word2vec 的高速化
目录4.1 word2vec 的改进①4.1.1 Embedding 层4.1.2 Embedding 层的实现4.2 word2vec 的改进②4.2.1 中间层之后的计算问题4.2.2 从多分类到二分类4.2.3 sigmoid 函数和交叉熵误差4.2.4 多分类到二分类的实现4.2.5 负采样4.2.6 负采样的采样方法4.2.7 负采样的实现4.3 改进版 w…...

【四】3D Object Model之创建Creation——clear_object_model_3d()/copy_object_model_3d()算子
😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有…...

第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性
文章目录第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性删除镜像成员时删除镜像数据库属性编辑或删除异步成员第三十一章 配置镜像 - 删除镜像成员时删除镜像数据库属性 删除镜像成员时删除镜像数据库属性 当从镜像中删除成员时,始终可以选择从属于该镜…...

自动写作ai-自动写作神器
自动生成文章 自动生成文章是指使用自然语言处理和人工智能技术,通过算法来自动生成文章的过程。一些自动生成文章的工具可以使用大量数据,学习数据背后的语言规范和知识结构,从而生成高质量和有用的文章。这种技术能够减少写作时间和人力成…...

P1368 【模板】最小表示法(SAM 求最小循环移位)
【模板】最小表示法 题目描述 小敏和小燕是一对好朋友。 他们正在玩一种神奇的游戏,叫 Minecraft。 他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。…...

投票感知器参数学习算法
投票感知器参数学习算法 以下为投票感知器参数学习算法的伪代码: 输入:训练集 (x1,y1),(x2,y2),...,(xn,yn)(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)(x1,y1),(x2,y2),...,(xn,yn),学习率 η\etaη,最大迭代次数 TTT…...

Hyper-v下安装CentOS-Stream-9
1、我不想要动态扩展的硬盘,固定大小硬盘性能更高,所以这里我先创建一个固定硬盘(如果你想用动态扩展的硬盘,那么可以省略前面几步,直接从第7步开始,并在第12步选择创建可动态扩展的虚拟硬盘)&a…...

数据结构之顺序表,实现顺序表的增删改查
目录 一、顺序表的概念 二、顺序表的分类 1.静态顺序表 2.动态顺序表 3.顺序表的增删改查 总结 一、顺序表的概念 顺序表是一段物理地址连续的村塾单元依次存储数据元素的线性结构,一般情况下使用数组存储,在数组上完成数据的增删改查。 二、顺…...

HTB-Jeeves
HTB-Jeeves信息收集80端口50000端口开机kohsuke -> Administrator信息收集 80端口 ask jeeves是一款以回答用户问题提问的自然语言引擎,面对问题首先查看数据库里是否…...