VSCode Python 配置
相关插件 VSCode 与 Python 有关的插件如下:(巨硬把这些插件拆分的实在太细了) Python Python Debugger Python Environments Pylance:Python语言服务器,支持自动补全、代码提示等 Black Formatter:代码格式化(需要通过 conda/pip 下载对应模块) Flake8:代码静态分析(需要通过 conda/pip 下载对应模块) Jupyter 插件包: Jupyter Jupyter Keymap Jupyter Cell Tags Jupyter Notebook Renderers Jupyter Slide show 注意需要单独下载 black 和 flake8 包,例如 1conda install black flake8 如果语法高亮等出现问题,最好先清理相关的配置缓存并重启VSCode,可以解决不少问题。 VSCode 插件配置 下面是目前VSCode关于Python的配置(2025年7月) 编辑器配置 12345678"[python]": {...
Pytorch 环境配置记录
记录一下当前 Python 涉及的一些环境配置。 基本信息 当前本地以及服务器的Python和CUDA的基本信息如下: Windows(以及WSL): Windows 11 miniconda Python 版本为 3.12.1 CUDA 驱动最高支持版本 12.8(nvidia-smi) GPU服务器: Ubuntu 20.04 anaconda Python 版本为 3.11.7 CUDA 驱动最高支持版本 12.4 两者存在很多差异,为了尽量保持本地和服务器的版本一致,选择使用 Python 3.12.x,CUDA 12.4。 说明: 指定 Python 版本是 conda 相比于 venv 的一大优势,另一个优势是 conda 包不局限于 Python。 很多库并不支持这么高版本的 Python,到时候再说,反正版本问题是避免不了的。 常用包 记录一些常用的包 12345678# 必备conda install numpy scipy pandas matplotlib seaborn scikit-learn sympy jupyter# 支持impor...
Git submodule 学习笔记
简单记录一下 git submodule 的用法,注意不是 subtree。 添加子模块 可以使用 submodule 功能添加子模块仓库 1git submodule add <子模块仓库的url> 默认会在主仓库下创建一个与子模块仓库同名的文件夹,用于存储子模块的所有内容。 也可以指定子模块使用的文件夹 1git submodule add <子模块仓库的url> subdir 此时在本地仓库中会将新建的子模块和对.gitsubmodules(记录子模块信息,包括最重要的子模块提交版本)的新建或修改添加到暂存区,需要正式提交。 子模块所使用的仓库url最好是公开可访问的,并且最好没有修改推送权限,只能单向接受远程更新的推送,这样最省事。 克隆含子模块的仓库 在克隆一个含有子模块的git仓库时,默认对主仓库的 git clone 命令不会把子模块也拉取下拉,只会得到一个包含子模块信息的.gitsubmodules文件和子模块对应的空目录,这是考虑到实际用途中某些子模块可能是可选项而非必选项。 可以在主仓库中使用下面的命令进行子模块的初始化和更新 12...
开源协议与知识共享协议
开源协议 开源协议是一套用于规范软件源代码使用、修改和分发规则的版权管理工具,广泛应用于编程语言、框架、工具库等软件开发项目。 开源协议的核心理念是“代码公开与共享”,区别于传统软件许可的“闭源限制”,旨在促进协作开发、技术创新和知识传播。 这里记录一下常见的几种开源协议: 较严格的,不允许衍生品闭源: GPL(General Public License) 最严格的开源协议。 要求:衍生代码必须使用 GPL 协议进行开源,确保代码的持续开放性。 LGPL(Lesser General Public License) GPL 的宽松版本。 要求:允许与闭源代码链接使用,但修改后的开源部分仍需沿袭 LGPL 协议。 Mozilla Public License(MPL) 比 LGPL 更灵活。 要求:修改源码的部分需要提供说明文档,且仅修改的部分需开源。 较宽松的,允许衍生品闭源: MIT / BSD 最宽松的开源协议。 要求:仅需保留原作者的版权声明。 允许:自由使用、修改、分发(包括闭源的后续开发)。 补充:最新的 MIT 和 BSD 几乎没有区别。 A...
Gauss-Legendre 和 Gauss-Lobatto 积分表计算
在数值计算的编程实践中经常需要获取 Gauss-Legendre 和 Gauss-Lobatto 积分点和权重, 除了直接打表,还可以利用 Legendre 多项式自身的特点和牛顿迭代法通过高效的数值计算获得相应的积分点和权重,这也是本文关注的内容。 本文的主要动机是对下面两份 MATLAB 代码的学习和解释: Legendre-Gauss Quadrature Weights and Nodes Legende-Gauss-Lobatto nodes and weights 基本概念 Gauss 型数值积分 首先需要介绍一些关于 Gauss 型数值积分的基本内容。 对于标准积分区间 \([-1,1]\) 的如下形式的数值积分公式: \[ I(f) = \int_{-1}^1 f(x)\,dx \approx I_n(f) = \sum_{i=1}^n w_i f(x_i) \] 其中节点 \(x_i \in [-1,1]\)。这些节点和权重的选取有一共 \(2n\) 个自由度,至多可以达到 \(2n-1\) 阶的代数精度。如果加上某些额外的约束条件,则可达到的最优代数精度也...
LeetCode 42. 接雨水
刷到一个笑话:字节跳动员工是不是个个都会接雨水。顺便记录一下这道题吧。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 1234输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 显然需要算出接满水之后的状态数组,即每一个位置的水面高度,然后减掉原本的柱子高度,对数组求和即可。 如何计算水面高度: 如果当前位置的高度大于左右两侧的高度,那么该位置的水面高度就是当前位置的高度,其实就是没有接水; 如果当前位置的高度小于左右两侧的高度,那么该位置的水面高度就是左右两侧的高度中的最小值。 所以问题归结于计算当前位置左侧的最高高度和右侧的最高高度,两次遍历即可。 12345678910111213141516171819202122232425262728class Solution {public: int trap(vector<...
密码学笔记——RSA算法
整理一下RSA算法的内容,主要参考维基百科。 对称加密与非对称加密 首先从对称加密开始,Alice和Bob需要进行加密的通信,Alice传递信息 \(m\) 给Bob。 为了信息安全,Alice首先用字母表替换的方式 \(A\) 将明文m变成密文 \(m'=f_A(m)\),然后通过公开方式传递给Bob,Bob使用同样约定好的字母表替换方式 \(A\) ,将收到的密文 \(m'\) 变成明文 \(f_A^{−1}(m')=f_A^{−1}(fA(m))=m\) 。 这里我们对信息都视作字符串,从而字母表替换规则 \(A\) 实际上定义了字符串到字符串的加密函数 \(f_A\) 和解密函数 \(f_A^{−1}\) ,这里加密函数和解密函数都是通过 \(A\) 决定的,并且极容易从其中一个推出另一个,因此双方都必须保管好密码本 \(A\) 。 例如,使用替换的字母表 \(A\) 为 11->3, 2->4, 3->2, 4->1 用轮换的记号就是\((1324)\),此时的加密函数 \(f_A\) ,明文\(1234\),密文 \(f...
Docsify 搭建记录
需要一个小型的在线文档系统,Docsify可以满足需求,记录一下搭建记录,主要参考Docsify官方的中文文档。 本地搭建 前提:本地需要安装 nodejs 并完成相应配置。 新建DocBase/文件夹,在其中本地安装 docsify-cli 1npm i docsify-cli -g 由于 docsify-cli 不是全局安装的,存在找不到 hexo 命令的问题,对于 Windows 可以通过临时添加路径到 PATH 解决,在 DocBase 目录下执行 1$env:Path += ";$((Get-Item -Path .\node_modules\.bin -Force).FullName)" 初始化项目 1docsify init ./docs 初始化过程会自动新建./docs子文件夹,并生成如下文件: index.html:项目入口 README.md:内容会被渲染成项目主页 .nojekyll:防止Github忽视下划线开头文件 使用下面的命令可以在本地预览 123cd ./docsdocsify serve# or docsify s...
Cpp 函数重载与函数标识符
函数重载 重载(Overloading)是 C++ 为允许同名函数使用多种参数列表以及多种实现版本而提供的机制,C语言是不支持的。 具体来说,函数重载指在同一个作用域中,定义多个具有相同名称但参数列表不同(个数或类型不同)的函数,这一组函数会构成相互重载的关系, 它们之间可以具有相同或不同的返回值类型。 例如 1234567891011121314#include <iostream>int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; }int add(int a, int b, int c) { return a + b + c; }int main() { std::cout << add(1, 2) << "\n"; std::cout << add(1.5, 2.3) << "\n&q...
Linux 学习笔记:控制台,终端,tty
整理一下关于下面这些概念的学习: 终端(terminal) 控制台(console) 电传打字机 tty(teletype) 这些概念在早期是有明确的定义的,但是随着计算机的发展,它们的物理实体逐渐消失,各种概念主要靠计算机软件模拟,它们之间的区别变得模糊难以理解,因此学习整理一下,以Linux系统为主。 TODO shell 控制台与终端 早期的计算机是一套巨大的机器,就像工厂的大型机器一样,如此的庞然大物必然需要一个专门的操作台, 用于陈列各种仪表盘、指示灯、按钮、电线,专业操作人员通过这个操作台控制计算机的启动、运行、停止,结果也会实时反馈到操作台,这个操作台就叫“控制台”(console)。 控制台是附着在机器上的设备,可以实现对计算机的完全操控,但是主要是用来管理计算机的。 对于多用户操作系统(特别是UNIX),控制台并不方便给用户提供计算服务。 因此自然产生了终端(terminal)的硬件概念:每个用户通过终端设备与主机远程连接(还不是现代意义上的基于互联网的远程连接),管理员给每个用户分配一个账户,用户“登录”到系统获得计算机使用权。在这个阶段,计算机通常只...