- 博客(74)
- 收藏
- 关注
原创 Gradle构建工具
(包装器),保证所有开发者使用相同版本的 Gradle。Gradle 是一个现代化的构建工具,广泛应用于。等项目的构建、依赖管理和自动化任务。的优点,提供了高性能、灵活的构建能力。,多个模块可以共享代码和依赖。Gradle 提供了。
2025-03-13 16:55:58
948
原创 kotlin基础知识点汇总
Java 的写法Kotlin 的写法(Unit 跟 void 一样效果)// 在 Kotlin 可以省略 Unit 这种返回值通过以上几种函数的介绍,可以很方便优化kotlin中代码编写,整体看起来几个函数的作用很相似,但是各自又存在着不同。使用的场景有相同的地方比如run函数就是let和with的结合体。
2025-03-13 16:40:39
1047
原创 PYG - Cora数据集加载 (自动加载+手动实现)
本文从Cora的例子来展示PYG如何加载图数据集。Cora 是一个小型的有标注的图数据集,包含以下内容:数据主要描述了论文之间的引用关系以及每篇论文的主题。可用于进行训练节点分类问题(即判断每篇论文属于哪个类别)PYG库提供了自动加载数据集的方法:对于 类来说: 是一个包含 单个 对象(图) 的数据集对象。由于 类的数据集中只有一个图,因此:下载数据:解压文件:解析数据:数据存储:原始文件(以 为前缀)是以下几种内容的存储形式:加载后,数据以 对象的形式存储,主要包含以下内容:以 Cora
2024-12-22 11:16:34
1176
2
原创 消息传递——GNN图神经网络核心思想
消息传递(Message Passing)是图神经网络(GNN)的核心思想,它的主要目标是基于图结构更新每个节点的特征表示。简单来说,消息传递包括以下两步:每个节点从其邻居节点(通过图的边连接)接收信息(即“消息”),这些信息通常是邻居节点的特征或状态。通过某种规则(例如求和、平均、最大值等)将这些邻居的消息聚合成一个整体表示。将聚合后的邻居信息与当前节点自身的特征结合起来(例如加权求和、非线性变换),更新当前节点的特征表示。
2024-12-22 00:05:18
1432
原创 用LeNet-5进行MNIST 手写数字识别(纯手搓版,含代码)
按批次取出数据,X是图片,y是标签#向前传播X, y = X.to(device), y.to(device) #把数据传入显卡cur_loss = loss_fn(output, y) # 计算损失函数#计算此轮精确度#反向传播optimizer.zero_grad() #清空梯度cur_loss.backward() # 反向传播optimizer.step() # 更新权重loss += cur_loss.item() #累加此批次的loss值。
2024-12-15 19:27:49
1273
3
原创 Java:JAR包的创建、导入与运行
现在的软件系统功能越来越复杂,规模也越来越大,为了应对这种挑战,人们将 “老系统” 中可以重用的代码抽取出来单独构建为 “组件(Component)”,开发新系统时,直接使用这些现成的组件而不是一切都重新再来,是 “组件化开发(CBD:Component Based Development)” 的基本思想。Java 应用程序开发时,最普遍使用的组件就是 jar 包,JDK 的各个组件,基本上都是以 jar 包的形式提供给 Java 开发者的。什么是 Jar 包?
2024-11-30 10:20:46
2006
原创 Java:一篇讲透Stream API(爆肝两万字)
Java 8 引入的 Stream API 是函数式编程的核心之一,它通过高效的流操作,使得对集合、数组等数据源的处理更加简洁、灵活且声明式。Stream API 能够支持各种类型的数据处理,极大地提高了代码的可读性、可维护性,并且增强了代码的表达能力。Stream 并不是存储数据的结构,而是数据的操作管道。它是一个 函数式风格 的 API,支持声明式的操作来处理数据流(如过滤、排序、转换等)。Stream API中的“Stream(流)”,可以看成是一组数据的 集合,我们可以对它施加一系列的数据操作,这些
2024-11-29 22:47:49
1432
原创 Java函数式编程+Lambda表达式
Java8新引入函数式编程方式,大大的提高了编码效率。从面向对象编程视角来看,程序中使用的变量,其实只是一个值的容器,这个容器中,可以放置不同的值。从函数式编程视角,变量其实只是值的一个“别名”,值本身是不能改的。采用函数式编程思想设计类,强调“类”所封装的数据,应该只被初始化一次,之后就不再更改。JDK中的String类型,就是用“函数式编程”风格设计出来的一个例子。Java 8引入了Lambda表达式特性,提供了Stream API。
2024-11-28 21:09:50
1246
原创 算法模板5:搜索+拓扑+最短路(dijkstra + Bellman-Ford + spfa + floyd)
搜索+拓扑+最短路(dijkstra + Bellman-Ford + spfa + floyd)
2024-11-25 00:22:25
469
原创 算法模板2:位运算+离散化+区间合并
原区间可能范围很大(如 [1,109][1, 10^9]),无法直接操作。:给定 n 个区间 [li,ri][l_i, r_i],求所有区间的覆盖总长度(去重后的长度)。:有 n 个点,每次给区间 [l,r][l, r] 增加一个值 cc,并查询某个点的最终值。:可能有很大的值范围(如 [1,109][1, 10^9]),通过离散化解决大范围权值问题。:插入值可能范围过大(如 [1,109][1, 10^9]),需离散化值域。:时间范围可能很大(如 [1,109][1, 10^9]),需离散化时间点。
2024-11-24 22:42:26
693
原创 算法模板1:排序+二分+高精度+前缀+差分
高效处理多次矩形区域修改操作,最终还原 原矩阵。:高效处理多次区间修改操作,最终还原原数组。:快速求任意矩形区域的元素和。:快速求任意子区间的元素和。
2024-11-24 22:39:55
398
原创 c++面向对象
这是实现多态的一部分,如果没有虚析构函数,程序可能会发生内存泄漏,因为基类析构函数不会自动调用派生类的析构函数。菱形继承指的是一个类继承自两个类,而这两个类又有相同的基类。在没有虚继承的情况下,派生类会有两个基类的副本,导致二义性问题和资源重复管理的问题。智能指针是 C++11 引入的,用来管理动态内存的分配和释放,避免手动内存管理导致的内存泄漏问题。拷贝构造用引用的方式传入函数,将传入的人身上的所有属性拷贝到我身上。意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活性。
2024-11-21 14:24:54
1057
2
原创 pytorch经典训练流程
监督学习是一种机器学习方法,模型通过已标注的数据(输入与输出)进行训练,从而学习从输入预测输出的映射关系。其目标是让模型能够在未标注的新数据上作出准确预测。
2024-11-21 14:18:17
1425
原创 Torch类的基本操作,数据预处理,数据加载
每次对这些张量执行操作,PyTorch 会在后台构建计算图以记录操作历史,并自动计算梯度。梯度分离在深度学习模型开发中有广泛的应用,尤其在需要控制梯度传播路径或者冻结部分模型参数时非常重要。是用来高效加载和迭代数据集的工具,特别是在深度学习中,常用于分批次读取数据、打乱数据等操作。PyTorch 张量支持灵活的形状操作,主要涉及获取张量形状、调整形状、扩展维度等操作。,任何对它的操作都会记录在计算图中,计算图会追踪操作历史以便后续调用。在迁移学习中,我们通常会冻结预训练模型的参数,避免对其进行更新。
2024-11-21 13:59:09
1210
原创 ubuntu+windows双系统切换后蓝牙设备无法连接
最近在安装ubuntu+Windows双系统后,电脑连接蓝牙出现了问题,每次切换系统之后都要把原来储存的蓝牙信息删除才能再次连接。这是因为蓝牙设备的配对信息存储在操作系统中。当从一个系统(如 Windows)切换到另一个系统( Ubuntu)时,设备识别到配对信息不一致,导致连接失败。想要解决这个问题有两种方法,一种是在ubuntu系统中把蓝牙设备的信息改成和Windows中的一样,第二种是在Windows中把信息改成和ubuntu的一样。由于懒得改Windows的注册表,所以选择第一种方法。
2024-11-18 22:50:37
1622
6
原创 git使用教程
涵盖了Git的简介、安装、配置、基本操作、分支管理、远程仓库的使用以及常见的工作流程。它还提供了在Windows和Linux系统上安装Git的步骤,如何在VS Code中集成Git,以及一个常用Git命令的总结。
2024-11-17 16:38:38
2210
2
原创 Python: argparse模块
位置参数是指在命令行中必须按顺序提供的参数。这些参数的顺序非常重要,程序会根据顺序来解析它们。会将所有传递给参数的值视为字符串,但你可以指定其他类型,例如。如果你希望某个可选参数通过出现的次数来控制某些行为,你可以使用。参数提供详细的帮助信息,帮助用户理解该参数的作用。当你没有指定参数时,可以为参数提供默认值。你可以将位置参数和可选参数结合起来使用。对象,该对象将负责解析命令行参数。是一个位置参数,用户必须提供它。,如果指定该参数,则将值设置为。参数限制某个可选参数接受的值。,程序将输出更详细的结果。
2024-11-09 23:51:02
457
1
原创 Windows上安装与使用 Jupyter Notebook
全局环境指的是安装在 Miniconda 或 Anaconda 根目录的 Python 环境,而虚拟环境是用于隔离不同项目和库的独立环境。可以选择将 Jupyter Notebook 安装到 Miniconda 的 base 环境,这样即使在没有激活任何虚拟环境时也可以使用 Jupyter Notebook。当然,最方便的方法就是用vscode或者PyCharm的插件来实现,直接打开.ipynb的文件,然后按照应用的提示直接安装。为了避免在全局环境中安装库,可以为每个项目创建独立的虚拟环境。
2024-11-09 20:59:52
1451
原创 【整理向】c++,Java与Python的面向对象(OOP)之间的异同
相似之处:三者都支持类和对象、封装、继承和多态等OOP基本特性。不同之处内存管理:C++需要手动管理内存,Java和Python都有垃圾回收机制。继承机制:C++和Python支持多重继承,Java通过接口来实现类似功能。访问控制:C++和Java有显式的访问控制符,Python依赖命名约定。
2024-11-03 14:56:28
1075
原创 java 对象序列化
如果需要更复杂的序列化控制,可以定义和// 调用默认序列化方法// 进行额外处理(例如加密某些字段)// 调用默认反序列化方法// 进行额外处理(例如解密某些字段)当然我们也可以自定义序列化过程。
2024-11-03 13:51:25
1416
原创 并查集+最小生成树
并查集(Disjoint Set Union, DSU)是一种用于管理元素集合的数据结构,它能够有效地支持合并和查询操作。它在许多算法和数据结构中有广泛的应用,尤其是在处理动态连通性、图的最小生成树(MST)和网络连接问题时。
2024-10-29 23:57:59
805
3
原创 《数值分析》实验报告-线性方程组求解
通过此实验,我们将实现三种不同的线性方程求解方法,并通过图形界面(GUI)展示各个步骤及求解结果。通过该实验,将加深对线性代数中矩阵变换和方程组求解的理解,并提升使用 Python 进行科学计算和图形界面设计的能力。当用户点击求解按钮后,系统将获取用户输入的矩阵数据,调用相应算法进行计算,并显示结果。使用 Tkinter 实现输入方程组的图形界面,包括输入增广矩阵的行数和列数的选项,动态生成矩阵的输入框,并展示求解的结果。区域动态生成三种算法的求解结果,并以变量值的形式展示,如。使用 Label 在。
2024-10-29 00:14:23
1906
原创 java OOP 对象操作
如果你写了一个类,把对象放到ArraryList集合中,那么,你需要重写equals方法,才能在集合中使用indexOf()方法查找到特定的对象,这个就是为什么你在定义类时,需要重写equals()方法的原因。JDK中的许多集合,比如ArrayList,它与放在集合中的对象之间,就是第二种对象组合方式,集合对象自己,与放在集合中的对象,其生命周期是相互独立的。▪ 在实际开发中,我们经常需要比对某两个对象的“内容” ,比如你己经有了一个对象,想在另一个对象集合中找到是否有“内容一样”的对象。
2024-10-28 23:54:49
1063
原创 java内部类
内部类可看成是外部类的成员,其地位等同于类中的其他成员,因此,它可以自由地访问外部的类成员(包括私有的成员)。有时候我们希望以面向对象的方式封装某些信息为一个类,而这些信息仅在一个地方被使用,这时,创建一个“独立的”和“公开的”类是不必要的,而且它也不利于信息隐藏。因此,在这种场景下选择内部类是合适的。内部类编译以后,每个内部类都会产生一个.class文件,其文件名通常具有以下格式:外部类名$内部类名.class内部类有几种表现形式,下面依次介绍。
2024-10-26 00:17:49
931
2
原创 Java泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。(感觉和c++的模板很像,功能和写法都很类似)假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用Java 泛型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。
2024-10-24 23:28:54
1135
2
原创 Java OOP进阶:继承,抽象类、接口、多态
以这种方式定义的常量,说明这些常量需要被实现这个接口的类所使用。请注意要为它们设计出有意义的名字,以便保证代码的可读性。只要一个类声明实现了这个接口,就可以直接使用这些常量。定义在接口中的常量必须被初始化例子:就这样使用// 数组的下界// 数组的上界System.out.println("下界: " + LOWBOUND);System.out.println("上界: " + UPBOUND);// 打印界限值。
2024-10-20 19:54:21
892
原创 Linux常用功能整合
为了便于理解,本文从常用操作和概念开始讲起。虽然已经尽量做到简化,但是涉及到的内容还是有点多。在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。能简单使用 cat,grep,cut 等命令进行一些操作;文件系统相关的原理,inode 和 block 等概念,数据恢复;硬链接与软链接;进程管理相关,僵尸进程与孤儿进程,SIGCHLD。
2024-10-14 20:41:20
1174
1
原创 Java数组:Arrays 和 ArrayList 的基本操作
在 Java 中,ArrayList是一个可变长度的数组实现,属于java.util包。与普通数组不同,ArrayList允许动态调整其大小,因此它可以根据需要存储任意数量的元素。ArrayList主要用于存储对象,可以包含重复元素,并且它们的顺序与插入顺序一致。ArrayList是实现List接口的一个类,提供了比数组更灵活的数据存储方式,特别适合需要频繁增删元素的场景。
2024-10-10 17:05:49
1150
原创 Java try-catch结构异常处理机制与 IllegalArgumentException 详解
在编程中,异常(Exception)是一种处理程序运行时出现错误或不正常情况的机制。它能够帮助程序员优雅地捕获和处理错误,避免程序因为未处理的错误而崩溃。Java 提供了强大的异常处理机制,使得程序在出现意外情况时,可以通过捕获和处理异常来保持系统的稳定性。是的一种,它表示传递给方法的参数不合法,通常用于方法参数校验。这个异常不会被编译器强制要求捕获,因此属于不可检查异常。
2024-10-02 23:04:43
950
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人