自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 三维重建【5】3D Gaussian Splatting:3R-GS论文解读

近几十年来,从2D图像构建3D表示一直是一个长期存在的研究挑战。最近,神经辐射场(NeRF)和3D高斯分布(3DGS)等方法已成为3D场景表示的强大方法,特别是对于新颖的视图合成。这些基于NeRF和3DGS的方法需要准确的相机参数来正确建立3D-2D投影关系,这项任务通常依赖于运动结构 (SfM) 技术(例如 COLMAP)。然而,SfM 过程通常非常耗时,有时对于具有无特征区域的场景或对象(例如室内环境)来说并不稳健,这使得它们不太可靠。

2025-12-23 14:32:54 545

原创 大型语言模型(入门篇)B

简单来说,可以将大型语言模型(LLM)想象成一位知识渊博、功能多样的助手,能够理解并生成人类语言。然而,像任何助手一样,它需要指令才能明白你需要它完成什么样的任务。这个指令,即你提供给LLM以引导其行为的文本,被称为提示词。交互通常遵循以下流程:一个问题:地球和月球之间的距离是多少?一条指令:将以下句子翻译成英文“你最近好吗?一项创意文本请求:写一个关于机器人发现音乐的短故事。待补充文本:关于学习编程最重要的一点是?

2025-12-23 09:53:37 496

原创 大型语言模型(入门篇)A

大型语言模型,通常缩写为LLMs,是人工智能(AI)和自然语言处理(NLP)的一部分。LLM本质上是一种AI模型,专门用于理解、生成和与人类语言文本交互,可以将其视为一个经过训练、能处理单词、句子和段落的复杂系统。在AI和机器学习中,“模型”是一个经过数据训练的系统,用于识别模式或进行预测。它不是一个物理实体,而是一个复杂的数学和计算结构。表明模型的处理对象。它专门处理人类语言——阅读、处理和生成。这使其与训练于图像、声音或数字数据的AI模型有所不同。

2025-12-15 16:55:27 1140

原创 算法题(Python)哈希表 | 2.两个数组的交集

给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。本题,主要要学会使用一种哈希数据结构:unordered_set。

2025-12-11 17:19:25 289

原创 算法题(Python)哈希表 | 1.有效的字母异位词

哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。例如冲突的位置,放了小李,那么就向下找一个空位放置小王的信息,所以要求tableSize一定要大于dataSize,要不然哈希表上就没有空置的位置来存放冲突的数据。此时,为了保证映射出来的索引数值都落在哈希表上,我们会再次对数值做一个取模的操作,这样就保证了学生姓名一定可以映射到哈希表上。我们需要依据哈希表中的空位来解决碰撞问题。

2025-11-27 16:32:43 781

原创 算法题(Python)链表篇 | 7.环形链表II

采用快慢指针法,分别定义fast和slow指针,从头节点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果fast和slow指针在途中相遇,则说明这个链表有环。也就是说,在相遇节点处定义一个指针index1,在头节点处定义一个指针index2,让index1和index2同时移动,每次移动一个节点,则它们相遇的地方就是环形入口的节点。,快慢指针相遇前,指针走的次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体走的次数小于2n。如果链表无环,则返回null。

2025-11-26 15:55:22 698

原创 算法题(Python)链表篇 | 6.链表相交

给你两个单链表的头节点headA和headB,请你找出并返回两个单链表的起始节点。如果两个链表没有交点,返回null。比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。为了方便举例,假设节点元素数值相等,则节点指针相等。注意,函数返回结果后,链表必须保持其原始结构。简单来说,就是求两个链表交点节点的指针。题目数据保证整个链式结构中不存在环。

2025-11-25 10:45:08 237

原创 三维重建【4-B】3D Gaussian Splatting:代码解读

本期主要阐述训练整体流程及训练相关参数。

2025-11-21 17:37:26 269

原创 算法题(Python)链表篇 | 5.删除链表的倒数第N个节点

本题是双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾,再删掉slow所指向的节点。给你一个链表,删除链表的倒数第n个节点,并返回链表的头节点。

2025-11-21 09:49:40 22

原创 算法题(Python)链表篇 | 4.两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。本题建议采用虚拟头节点,要不然每次针对头节点(没有前一个指针指向头节点),还需要单独处理。

2025-11-14 09:46:55 262

原创 算法题(Python)链表篇 | 3.翻转链表

然后开始反转,首先将cur→next节点用tmp指针保存一下,即保存这个节点。(之所以保存该节点,是因为要改变cur→next的指向,将cur→next指向pre,从而反转第一个节点)最后,cur指针指向null,循环阶数,链表翻转完毕,此时return pre指针即可,pre指针指向新的头节点。之前链表的头节点是元素1,反转之后头节点就是元素5,这里并没有添加或删除节点,仅仅是改变next指针的方向。首先定义一个cur指针,指向头节点;如果再定义一个新的链表,实现链表元素的反转,这是对内存空间的浪费。

2025-11-13 11:11:02 278

原创 算法题(Python)链表篇 | 2.设计链表

void addAtIndex(int index, int val)将一个值为val的节点插入到链表中下标为index的节点之前。如果index等于链表的长度,那么该节点会被追加到链表的末尾。void addAtHead(int val)将一个值为val的节点插入到链表中的第一个元素之前。void addAtTail(int val)将一个值为val的节点追加到链表中作为链表的最后一个元素。int get(int index)获取链表中下标为index的节点的值。假设链表中的所有节点下标从0开始。

2025-11-12 16:17:56 279

原创 算法题(Python)链表篇 | 1.移除链表元素

关于链表的理论基础,见。

2025-11-11 11:26:48 506

原创 算法题(Python)数组篇 | 7.开发商购买土地

然而,由于城市规划的限制,只允许将区域按横向或纵向划分成两个子区域,而且每个子区域都必须包含一个或多个区块,为了确保公平竞争,你需要找到一种分配方式,使得A公司和B公司各自的子区域内的土地总价值之差最小。实际上,本题可以在暴力求解的基础上,优化一下,就无需前缀和了,在行向遍历的时候,遇到行末尾就统计一下,在列向遍历的时候,遇到列末尾就统计一下。就是前缀和的思路,先统计好,前n行的和q[n],如果要求矩阵a行和b行之间的总和,那么q[b]-1[a-1]就好。的分析,使用前缀和要注意区间左右边的开闭情况。

2025-11-10 14:45:34 377

原创 算法题(Python)数组篇 | 6.区间和

示例:假设我们要统计nums[i]这个数组上的区间和。我们先做累加,即p[i]表示下标0到i的nums[i]累加之和。如下图所示,p[5] - p[1]就是绿色部分的区间和,而p数组是之前计算好的累加和,所以后面每次求区间和之后,只需要。举一个极端的例子,如果我查询m次,每次查询的范围都是从0到n-1,那么该算法的时间复杂度是。概念,前缀和的思想是重复利用计算过的子数组之和,从而降低区间查询需要累加计算的次数。给定一个整数数组Array,请计算该数组在每个指定区间内元素的总和。

2025-11-07 15:21:22 317

原创 算法题(Python)数组篇 | 5.螺旋矩阵II

本题求解依旧坚持循环不变量原则。所有元素,且元素按顺时针顺序螺旋排列的。给定你一个正整数n,生成一个包含1到。正方形矩阵matrix。

2025-11-07 11:34:13 255

原创 算法题(Python)数组篇 | 4.长度最小的子数组

首先要思考,如果用一个for循环,那么应该表示滑动窗口的起始位置,还是终止位置。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环完成了一个不断搜索区间的过程。窗口的起始位置如何移动:如果当前窗口的值大于等于target了,窗口就要向前移动(也就是该缩小了)。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置,从而将。

2025-11-06 10:35:06 879

原创 算法题(Python)数组篇 | 3.有序数组的平方

数组本身是有序的,只是负数平方之后可能会成为最大数。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法,i指向起始位置,j指向终止位置。给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。定义一个新数组result,和输入数组A的大小一样,让k指向result数组的终止位置。

2025-11-05 17:31:06 395

原创 三维重建【4-A】3D Gaussian Splatting:代码解读

关于旋转四元数与旋转矩阵的关系,旋转四元数和旋转矩阵都是描述三维空间中旋转的数学工具。旋转四元数提供了一种有效的方式来表示和计算三维旋转,而旋转矩阵则是一种更直观的旋转表示方法。gaussian_model.py文件中主要写高斯模型的参数是如何构建的,如协方差矩阵、球谐函数、点云数据读取后的初始化、激活函数、学习率的设计、致密化所用的方法等。相机模型表达的是高斯分布在三维空间投影到二维空间(像素平面)的一个转换过程。

2025-11-05 10:35:24 1358

原创 算法题(Python)数组篇 | 2.移除元素

给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。本题的暴力解法是两层for循环,一个for循环遍历数组元素,第二个for循环更新数组。很多人首先想到的是删掉数组中多余的元素即可,但是。很明显暴力解法的时间复杂度是。

2025-10-31 10:49:47 354

原创 三维重建【0-E】3D Gaussian Splatting:相机标定原理与步骤

本节内容将详细阐述如何使用openCV库进行简单的相机标定,编程语言为Python。

2025-10-30 17:21:33 198

原创 三维重建【0-D】3D Gaussian Splatting:相机标定原理与步骤

基于前面的学习,通过相机成像几何模型,我们知道了如何将世界坐标系中的三维坐标和像素坐标系中的二维坐标联系起来。此外,根据标定棋盘图纸及其对应的照片已经得到了单应性矩阵H(H是内参矩阵和外参矩阵的混合体)。首先不考虑镜头畸变,求解思路是利用旋转向量的约束关系,先将单应性矩阵H化为3个列向量H=[h1 h2 h3]H=[h_1 \space h_2 \space h_3]H=[h1​ h2​ h3​]H=[h1 h2 h3]=sM[r1 r2 t]H=[h_1 \space h_2 \space h_3]=s

2025-10-29 16:45:46 714

原创 算法题(Python)数组篇 | 1. 二分查找

本题的前提是数组是有序数组,且题目中强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是。写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。二分法的第一种写法,定义target是在一个左闭右闭的区间里,也就是**[left, right]**。数组的元素是不能删的,只能覆盖。

2025-10-28 17:48:54 770

原创 三维重建【0-C】3D Gaussian Splatting:相机标定原理与步骤

接上篇内容,继续对相机标定原理与步骤进行阐述,本节主要是张氏标定法的初步讲解与单应性矩阵的推导计算。

2025-10-28 15:39:43 879

原创 卡码网语言基础课(Python) | 21.图形的面积

如果子类的对象调用一个方法,发现并没有提供这个方法,就会从当前对象的父类中寻找,如果父类中有则直接调用父类中的方法,如果还没有,就从父类的父类中寻找,就好像,当父亲和儿子都拥有一样东西,会优先使用自己的,如果发现自己没有,才会使用继承的方法。使用封装,我们隐藏了类的一些属性,具体的做法是使用getter方法获取属性,使用setter方法设置属性,如果希望属性是只读的,则可以直接去掉setter方法,如果希望属性不能被外部访问,则可以直接去掉getter方法。每个类都有一个用于计算面积的方法。

2025-10-24 15:52:42 744

原创 卡码网语言基础课(Python) | 20.排队取奶茶

队列已经构建完毕,接下来需要接收数字m和m个整数的输入,表示取奶茶的操作,如果数字为1,表示有人取走了奶茶,即出队操作,如果数字为2,表示有人新加入了奶茶队列,即入队操作。队列,顾名思义,和排队的队列结构是类似的,在排队的过程中,想要加入队列,需要在队伍的最后一位(也被称为队尾)入队,想要离开队列,需要从队伍的第一位(也被称为队头)出队。注意上述操作中,需要考虑出队操作中队列是否为空的情况,当且仅当“操作指令为出队,队列中的元素不为空,即if queue为True时”才能出队。

2025-10-23 15:10:35 524

原创 卡码网语言基础课(Python) | 19.洗盘子

盘子堆放区操作说明:1)当操作为1时,表示从盘子堆放区拿走顶部的盘子清洗;接下来接收m和m个整数的输入,表示对盘子的操作,如果数字为1,表示盘子被拿去清洗,即出栈操作,如果数字为2,表示有新的盘子加入到待清洗区域中,即入栈操作。(后进入栈的元素离栈顶比较近,先出来),允许进行插入和删除的那一端是栈顶,与之对应的另一端是栈底,如果一个栈不包含任何元素,这个栈被称为空栈。第一行要接收整数n的输入,表示栈中有n个盘子,之后读取一行数据,表示盘子编号,将字符串拆分后,转为整数,最后转为列表方便遍历。

2025-10-23 10:13:54 774

原创 卡码网语言基础课(Python) | 18.开房门

我们常常把map称之为映射,就是将一个元素(通常称之为key键)与一个相对应的值(通常称之为value)关联起来,比如说一个学生的姓名(key)有与之对应的成绩(value),它们是一一对应的,就好像一把钥匙开一扇门,在map中键是唯一的,也只有一个唯一的确定的值。比如下面的图示:左边是key,每一个姓名都对应着一个成绩value。而在Python中,通常用字典dict实现了映射这种数据结构。"tom": 98,

2025-10-22 11:13:30 861

原创 卡码网语言基础课(Python) | 17.判断集合成员

最后一行包含一个整数n,表示需要进行判断的目标整数,可以使用in进行判断,如果在集合中,输出YES;类似于列表的读取,这里需要读取一行作为字符串,将之拆分为列表,并转为整数,最后使用set()转换成整数集合。除了以上两种常见的操作,set还提供了一些常见方法方便使用,主要包括的就是集合的增删和遍历操作。集合最常见的用法是判断某个元素是否在集合中和去除集合中的重复元素。请你编写一个程序,判断给定的整数n是否存在于给定的集合中。集合也是一种数据结构,和数学中的集合类似,创建集合,或者是列表转为集合。

2025-10-21 17:16:43 388

原创 卡码网语言基础课(Python) | 16.出现频率最高的字母

我们已经学习了数组(列表)、字符串、链表等数据结构,但是大家有没有发现,如果我们想要找到其中某个元素或者节点,需要从索引为0的位置或者链表头节点开始,逐一开始比较,直到找到相等的位置或者末尾才会结束。那是否可以避免之前的比较,直接通过要查找的记录直接找到其存储位置呢?是有的,可以通过“哈希表”来实现,哈希表是根据关键码key的值而直接进行访问的数据结构。哈希表的作用是快速判断一个元素是否出现在集合里,它的核心思想是在关键码和存储位置之间建立一个确定的对应关系f,使得每个关键字key。

2025-10-20 15:04:22 733

原创 卡码网语言基础课(Python) | 15.链表的基础操作III

我们可以假设这样一个场景:在传递情报过程中,A的下线是B,也就是A.next=B,现在我们要引入一个C充当A和B之间的中间人,新的关系是A的下线是C,C的下线是B,我们可以直接将C的next指向B,但是B无法直接表示,之前是用A.next来表示B的,即C.next=A.next,然后再将A的next指向C,即A.next=C,这样就将新的关系构建完成了。3)在main函数中,创建一个包含一组整数数据的链表,然后根据输入的n和m,调用链表的方法插入和删除元素,并输出整个链表的所有元素。

2025-10-16 10:53:34 585

原创 卡码网语言基础课(Python) | 14.链表的基础操作II

接下来,我们需要根据题目要求读取k个m,并输出这k个值,如果输入的m是一个小于等于0的数或者m大于链表的长度,则无法找到第m个节点,判定m位置不合法,输入对应的语句。和上个题目相似,依旧需要使用for循环,迭代读取n个整数,然后使用之前定义的insert函数将新的链表节点插入到链表尾部,从而根据读入的数据构建一个完整的链表。然后我们需要读取n和k,n表示需要构建的链表的长度,k代表输入的m的个数,并构建一个新的链表。使用for循环,寻找链表中的第m个元素,只需控制走m-1步即可。

2025-10-15 14:46:37 542

原创 卡码网语言基础课(Python) | 13.链表的基础操作I

元素按照一定的顺序来排列可以通过索引来访问数组中的元素和字符串中的字符但是它们也有一些缺点:数组的大小通常是固定的,一旦分配了内存空间,就难以动态地扩展或缩小,如果需要存储的元素数量超出了数组的大小,就需要重新分配更大的数组,并将原来数组的内容复制过去,需要执行很多额外的操作(Python中的列表是动态扩容的,但是在大多数语言中,数组的大小固定)。

2025-10-15 10:16:47 903

原创 卡码网语言基础课(Python) | 12.位置互换

本题将实现字符串的奇偶位互换。奇偶位互换是指字符串的奇数位和偶数位相互交换位置,比如下面的字符串"0aa0",前两位相互交换,后两位相互交换,返回的结果是a00a。遍历字符串第1位和第2位交换第3位和第4位交换第i位和第i+1位交换第i+2位和第i+3位交换。

2025-10-13 17:53:41 376

原创 卡码网语言基础课(Python) | 11.句子缩写

我们虽然完成了题目,但是题目中存在了一段重复的内容,就是判定字符是否是小写形式,如果是小写则转换成大写。else:else:如果后面还需要将小写字符转换成大写,我们还需要再写一次,代码就会显得有些冗余,更致命的是,如果这是一段很长的代码,并且再多个地方应用,当我们有了新的需求,需要对这一段代码进行修改时,我们需要一处处的找出再修改,这种情况下可以自己创建函数(用户自定义函数),将代码模块化,并在合适的地方重用,从而增加代码的复用性和可维护性。下面我们就尝试写一个将小写字符转换成大写字符的函数。

2025-10-13 15:51:47 894

原创 卡码网语言基础课(Python) | 10.平均绩点

本文介绍了卡码网Python基础课中计算平均绩点的题目解法。题目要求将输入的A-F等级转换为对应分数并计算平均值,处理非法输入时输出"Unknown"。文章详细讲解了字符串处理、条件判断和格式化输出的实现方法,包括使用标志位控制非法输入情况,以及使用format()方法保留两位小数。最后还延伸介绍了Python字符串格式化的三种方式:%操作符、format()方法和f-string。该解法通过遍历输入字符串,使用if-elif结构处理不同等级,并利用标志位确保非法输入时不输出错误结果。

2025-10-10 16:14:37 672

原创 卡码网语言基础课(Python) | 9.打印正方形

上图中的数据就是一个二维列表,它是由行和列组成的表格状数据结构,可以理解为包含其他列表的列表(列表的每一个元素都是列表),二维列表的元素可以通过两个索引来访问,一个索引表示行,另一个表示列,比如matrix[0][0]表示第一行第一列的元素,值为1;这里就使用了两层for循环,外部的for循环i用于控制迭代行,在每一行的迭代内部,有了第二个for循环,用于控制每一行中各列的迭代(即一个列表的遍历),通过这两个循环的嵌套,可以遍历整个二维列表,并使用matrix[i][j]访问每个元素的值。

2025-10-10 10:51:32 310

原创 卡码网语言基础课(Python) | 8.奇怪的信

题目要求我们计算出给定数各个位上数字为偶数的和。有一天,小明收到一张奇怪的信,信上要小明计算出给定数各个位数上数字为偶数的和。例如:5548,结果为12,等于4+8。小明很苦恼,想请你帮忙解决这个问题。想要判断是否是偶数(即可以被2整除a % 2 == 0),可以使用if判断,如果是偶数,则累加到result总和上。根据题目分析,我们需要使用取模运算和整数除法来获取每一位,直到n变为0。根据题目要求,需要使用循环来接收多组数据的输入,变量n表示输入的整数。

2025-10-10 09:57:47 382

原创 卡码网语言基础课(Python) | 7.摆平积木

一天,他把许多积木块组成了好多高度不同的堆,每一堆都是一个摞一个的形式。但是他很懒,他想移动最少的积木块来实现这一目标,你能帮助他吗?对于每一摞积木,如果当前摞积木的数量超过平均值,即当前摞积木数量>平均值,则将超出平均值数量的积木移到不足平均值的那一摞,超出的数量表示需要挪动的次数。题目要求我们把n堆高度不同的积木分成n堆高度相同的积木,假设我们面前真的有这样一堆积木,应该怎么做才能划分均等呢?积木是一组数据,可以用列表来表示,将输入的数据拆分成字符列表,然后使用map转成整数,最后转为列表。

2025-09-30 11:23:07 392

原创 三维重建【0-B】3D Gaussian Splatting:相机标定原理与步骤

在几何光学和阴极射线管显示中,畸变是对直线投影的一种偏移。简单来说,直线投影是场景内的一条直线投影到图像上也保持为一条直线。那畸变简单来说就是一条直线投影到图像上不能保持为一条直线,这是一种光学畸变。

2025-09-30 10:21:43 689 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除