-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.json
More file actions
1 lines (1 loc) · 71 KB
/
content.json
File metadata and controls
1 lines (1 loc) · 71 KB
1
{"meta":{"title":"XuHui","subtitle":"","description":"学习和生活日常","author":"xu","url":"https://xyuechen/github.io","root":"/"},"pages":[{"title":"search","date":"2023-07-29T08:10:56.000Z","updated":"2023-07-29T08:11:12.000Z","comments":true,"path":"search/index.html","permalink":"https://xyuechen/github.io/search/index.html","excerpt":"","text":""},{"title":"categories","date":"2023-07-29T08:05:55.000Z","updated":"2023-07-29T08:07:08.000Z","comments":true,"path":"categories/index.html","permalink":"https://xyuechen/github.io/categories/index.html","excerpt":"","text":""},{"title":"tags","date":"2023-07-29T08:07:46.000Z","updated":"2023-07-29T08:08:08.000Z","comments":true,"path":"tags/index.html","permalink":"https://xyuechen/github.io/tags/index.html","excerpt":"","text":""}],"posts":[{"title":"雨水容器","slug":"雨水容器","date":"2026-01-11T12:29:15.000Z","updated":"2026-01-14T06:15:18.941Z","comments":true,"path":"2026/01/11/雨水容器/","link":"","permalink":"https://xyuechen/github.io/2026/01/11/%E9%9B%A8%E6%B0%B4%E5%AE%B9%E5%99%A8/","excerpt":"","text":"盛最多水的容器题目:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例: 如上图所示,线的高度为:[1,8,6,2,5,4,8,3,7],如果我们选择图中的两条线,那么蓝色区域就是能容纳水的部分。我们假设左边的线向中间选取,可以发现有两种情况: 选取的中间线比左边红线短,那么,容器宽度和高度都减少,容积一定不会增加 选取的中间线比左边红线长,那么,容器宽度减少,高度不变(高度取决于左右线的最短那根),容积仍然不会增加 也就是说,如果我们要找到一个更大容积的容器,一定不能移动较长的那根线。假设上图中存在一个更大容积的容器,一定是比右边红线更长的线。 思路:定义两个指针L 和R,哪条线短就移动哪根,在这之前先计算容积,如果移动后容积更大就更新答案。 代码: 1234567891011121314class Solution: def maxArea(self, height: List[int]) -> int: left,right = 0,len(height)-1 ans = (right - left) * min(height[left],height[right]) while left < right: if height[left] <= height[right]: left += 1 update_ans = (right - left) * min(height[left],height[right]) ans = max(ans,update_ans) else: right -= 1 update_ans = (right - left) * min(height[left],height[right]) ans = max(ans,update_ans) return ans 接雨水题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例: 如上图所示的柱子高度为:height = [0,1,0,2,1,0,1,3,2,1,2,1],可以接到的雨水为蓝色部分,也就是6个单位面积。 思路:假设在位置i处,我们想要计算这里可以容纳水的体积,它取决于往左的所有柱子的最大高度和往右数的所有位置的最大高度,那么我们可以将从左往右的最高点定为一个数组为前缀和,从右往左的最高点定为一个数组为后缀和,在这个例子中它们分别为[0,1,1,2,2,2,2,3,3,3,3,3]和[3,3,3,3,3,3,3,3,2,2,2,1],在位置i上,可以容纳的水为min(pre_max,suf_max) - height[i] 代码: 12345678910111213141516class Solution: def trap(self, height: List[int]) -> int: n = len(height) pre_max = [0] * n pre_max[0] = height[0] for i in range(1,n): pre_max[i] = max(pre_max[i-1],height[i]) suf_max = [0] * n suf_max[-1] = height[-1] for i in range(n-2,-1,-1): suf_max[i] = max(suf_max[i+1],height[i]) ans = 0 for h,pre,suf in zip(height,pre_max,suf_max): ans += min(pre,suf) - h return ans","categories":[{"name":"algorithm","slug":"algorithm","permalink":"https://xyuechen/github.io/categories/algorithm/"}],"tags":[{"name":"study","slug":"study","permalink":"https://xyuechen/github.io/tags/study/"}]},{"title":"两数之和","slug":"两数之和","date":"2026-01-11T10:09:30.000Z","updated":"2026-01-11T12:28:45.045Z","comments":true,"path":"2026/01/11/两数之和/","link":"","permalink":"https://xyuechen/github.io/2026/01/11/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/","excerpt":"","text":"两数之和题目:给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。 假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。 示例: 输入:numbers = [1,2,4,6,10], target = 8 输出:[1,3] 暴力解法直接循环遍历该数组两次,直到找到解。 12345678class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: numDict = dict() for i in range(len(nums)): if target - nums[i] in numDict: return numDict[target - nums[i]], i numDict[nums[i]] = i return [0] 执行通过,但是耗时47ms,消耗内存17.6MB 双指针已知数组是有序的,如示例所示,如果我们选取第一个和最后一个元素,相加的结果为11,比目标值大,那么数组中的任何一个元素加上最后一个元素都会大于目标值,我们可以去除最后一个值,继续运算,1加6为7,小于目标值,那么数组中其他任何一个元素与6相加都会大于7,去掉第一个元素,以此类推,这就是相向双指针。 123456789101112class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: left_index=0 right_index=len(numbers)-1 while left_index < right_index: if numbers[left_index] + numbers[right_index] == target: break elif numbers[left_index] + numbers[right_index] > target: right_index -= 1 else: left_index += 1 return [left_index,right_index] 执行通过,耗时38ms,内存19.3MB,时间复杂度log(n) 进阶版本:三数之和题目:给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 解法:从上面的例子我们可以知道,如果数组是有序的,我们就可以使用相向双指针,我们可以先对数组排序;由于题目中说顺序不重要,那么我们人为规定一个顺序:i<j<k,然后我们可以枚举第一个数,然后问题就变成了另外两个数相加等于目标值减去第一个数,也就是上面的两数之和的问题。答案不能包含重复的元组,那么枚举时,如果这个数和上一个数相同,我们就跳过这个数。 代码: 12345678910111213141516171819202122232425class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: nums.sort() ans = [] for i in range(len(nums)-2): x = nums[i] if i > 0 and x == nums[i-1]: continue j = i + 1 k = len(nums) - 1 while j < k: s = x + nums[j] + nums[k] if s > 0: k -= 1 elif s < 0: j += 1 else: ans.append([x,nums[j],nums[k]]) j += 1 while j < k and nums[j] == nums[j-1]: j += 1 k -= 1 while j < k and nums[k] == nums[k+1]: k -= 1 return ans 执行时间695ms,消耗内存22.02MB 还可以继续优化吗 我们可以假设,这个数组排序后,最小的三个数相加都大于0,那么所有的数都一定不会满足条件,同理,如果最大的三个数相加都小于0,那么所有的数也一定都不会满足条件。 此外,如果当前i对应的数与数组最大两个的数相加大于0,那么也不用计算j和k了,因为一定不会存在解。 按照上面的思路优化代码后,执行时间499ms,消耗内存21MB","categories":[{"name":"algorithm","slug":"algorithm","permalink":"https://xyuechen/github.io/categories/algorithm/"}],"tags":[{"name":"study","slug":"study","permalink":"https://xyuechen/github.io/tags/study/"}]},{"title":"python单元测试","slug":"python单元测试","date":"2026-01-06T12:13:25.000Z","updated":"2026-01-06T12:26:01.957Z","comments":true,"path":"2026/01/06/python单元测试/","link":"","permalink":"https://xyuechen/github.io/2026/01/06/python%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/","excerpt":"","text":"发现规则pytest默认按照以下规则搜索测试: test_*.py *_test.py 以test_开头的函数 以Test开头的类 基本用法首先应该明确测试条件,然后创建一个基本框架: 创建一个 test_ 开头的文件 创建一个 Test 的类 创建一个 test_ 开头的方法然后可以在命令行输入 pytest,他就会执行对应的测试用例(函数和方法),例如:12345def test_a(): passclass Test: def test_b(self): pass 上面的例子中有两个测试用例 test_a 和 test_b,pytest 会输出测试用例执行和汇总信息 我们可以使用断言抛出错误信息 测试用例中没有异常即为通过 测试用例存在异常,判定为失败 高级用法 mark 标记是为了用例彼此不同,实现用例筛选,使用步骤为 注册标记 使用标记 标记的配置文件在根目录下,命名为 pytest.ini,在里面写入需要的内容,例如: 123456[pytest]markers = apiuiute2e 我们可以在测试用例上加上装饰器 @pytest.mark.xx 其中的 xx 替换为对应的标记 筛选标记:如果我们只希望之星对应标记的用例,可以这样 pytest -m xx,其中 xx 为对应的标记 一个用例可以有多个标记 一次可以筛选多个标记,例如 pytest -m "api or e2e" 就是同时筛选出 api 和 e2e 的标记的用例 fixture 可以实现自动在用例之前、之后完成用于测试的环境的构建和销毁 编写一个生成器,并使用 @pytest.fixture() 装饰,在测试用例中使用 @pytest.mark.usefixtures('生成器名称')。 可以使用 conftest.py 创建全局范围的 fixture hook 当 pytest 在合适的时机允许进入和退出 pytest 核心部分,可以改变原有的运行模式。 我们可以编写 yaml 文件来定义自身的测试 封装通过隐藏细节的方式降低使用的复杂度,添加新的功能特性。缺点:没有日志记录可以在 pytest.ini 中设置日志 1234log_file = ./logs/pytest.loglog_file_level = infolog_file_format = %(levelname)-8s %(asctime)s [%(name)s:(lineno)s] : %(message)slog_file_date_format = %Y-%m-%d %H:%M:%S 生成测试报告:修改配置文件,加上一行 addopts = --alluredir=./temps --clean-alluredir,然后在终端执行 allure generate -o report temps 一键执行:创建一个 run.py 的文件,在里面输入1234import pytestpytest.main()os.system('allure generate -o report temps')# 生成测试报告","categories":[{"name":"python","slug":"python","permalink":"https://xyuechen/github.io/categories/python/"}],"tags":[]},{"title":"python工具uv","slug":"python工具uv","date":"2025-04-28T12:55:30.000Z","updated":"2025-08-18T01:31:07.262Z","comments":true,"path":"2025/04/28/python工具uv/","link":"","permalink":"https://xyuechen/github.io/2025/04/28/python%E5%B7%A5%E5%85%B7uv/","excerpt":"","text":"背景在此之前常使用conda管理python环境和包,但是conda体积较大,而uv是一个用Rust写的工具,其优势在于速度快,兼容性强;当然,他不能处理发布包、运行脚本、管理项目元数据的,这是poetry的长处。 安装他的安装很简单。 使用curl(推荐) 在Linux或者Mac上:curl -LsSf https://astral.sh/uv/install.sh | sh 在window上,可以使用powershell:powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 使用pipx:命令为pipx install uv 安装后可以在终端使用uv --version来验证安装是否成功 工作流 创建虚拟环境 在开始安装前,通常需要先创建一个独立的环境以避免依赖冲突,uv创建环境的命令为: 1uv venv env_name 其中可以给自己的环境换一个名字,这个命令将查找系统中可用的python解释器,如果需要指定python版本,可以加一个参数: 1uv venv env_name --python 3.x 激活虚拟环境 激活方式取决于使用的shell: Bash/zsh:source .venv/bin/activate Fish:source .venv/bin/activate.fish Nushell:source .venv/bin/activate.nu PowerShell:.venv/Scripts/Activate.ps1 cmd:.venv/Scripts/activate.bat 安装依赖 激活环境后就是安装需要的依赖包,uv是兼容pip安装命令的,优势在于更快,下面是一些命令的解释 12345678# 安装一个包uv pip instal requests# 安装多个包uv pip install requests flask# 安装指定版本的包uv pip install "requests==2.28.1"# 从requirement安装uv pip install -r requirement.txt 卸载包可以将install换成uninstall,但是这样会导致虚拟环境和requirement.txt不同步,更好的做法是:修改reqirement.txt,然后运行uv pip compile更新,最后运行uv pip sync来清理环境。 uv add也可以下载依赖,区别在于这个命令可以自动更新依赖到.pyproject.toml中 其他命令 还有一些可以使用的命令如下: uv tree:查看项目的依赖关系树 uv init:初始化一个项目,新项目的目录下会生成pyproject.toml,.python-version等文件 更多具体内容可见官方文档","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"vscode远程通道","slug":"vscode远程通道","date":"2025-04-10T14:49:03.000Z","updated":"2025-08-18T01:31:18.283Z","comments":true,"path":"2025/04/10/vscode远程通道/","link":"","permalink":"https://xyuechen/github.io/2025/04/10/vscode%E8%BF%9C%E7%A8%8B%E9%80%9A%E9%81%93/","excerpt":"","text":"windows做服务器以Linux做远程服务器的教程很多,但是有时候需要Windows系统做服务器,这种情况的设置我也想记录一下。 安装Windows中的openssh用ssh连接时,本地称为client,远程主机称为host。 我们以Windows系统做host,需要安装一个连接工具,这里使用openssh。 启动设置,然后转到应用>应用和功能>管理可选功能。 扫描列表后,查看OpenSSH客户端是否已安装,如果没有,在页面顶部选择“添加功能”,然后: 若要安装OpenSSH客户端,请找到“OpenSSH客户端”,然后单击“安装”。 若要安装OpenSSH服务器,请找到“OpenSSH服务器”,然后单击“安装”。 安装完成后,就可以看到列出的OpenSSH组件。 SSH的初始设置若要配置OpenSSH,以管理员身份启动PowerShell,然后运行一下命令来启动SSHD服务: 12345678Start-Service sshd# OPTIONAL but recommended:Set-Service -Name sshd -StartupType 'Automatic'# Confirm the Firewall rule is configured. It should be created automatically by setup. Get-NetFirewallRule -Name *ssh*# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled# If the firewall does not exist, create oneNew-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 在Windows服务器中,username可以用激活电脑时使用的用户名,即文件资源管理器中C:\\Users\\username中的username。而servername则是设置>系统>关于中的“设备名称”。 然后在管理员运行的powerShell中输入 1Ssh username@servername 第一次运行时会弹出 123The authenticity of host 'servername (10.00.00.001)' can't be established.ECDSA key fingerprint is SHA256:(<a large string>).Are you sure you want to continue connecting (yes/no)? 回答yes后输入开机密码,密码不会显示出来 ?由于我使用的是Mac,暂时没找到连接win的方法,搁置","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"experience","slug":"experience","permalink":"https://xyuechen/github.io/tags/experience/"}]},{"title":"AnnData数据结构","slug":"AnnData数据结构","date":"2025-04-08T15:00:34.000Z","updated":"2025-04-09T14:24:32.700Z","comments":true,"path":"2025/04/08/AnnData数据结构/","link":"","permalink":"https://xyuechen/github.io/2025/04/08/AnnData%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/","excerpt":"","text":"AnnData对象几乎可以匹配R语言中单细胞数据分析的Seurat对象,今天试一下对python中AnnData进行数据提取和回吐操作。 这个图来源于AnnData的文档 数据读取这里使用单细胞转录组数据GSE163558 这个数据集共10个样本,我们下载网页中的GSE163558_RAW.tar,解压后将文件夹格式处理成下面这样。 123456789101112131415161718GSE163558├── GSM5004180_PT1│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004181_PT2│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004182_PT3│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz├── GSM5004183_NT1│ ├── barcodes.tsv.gz│ ├── features.tsv.gz│ └── matrix.mtx.gz... 使用python读取上述文件夹中的数据 12345678import pandas as pdimport scanpy as scimport numpy as npimport os# 文件夹名称dir = os.listdir('../data/GSE163558_RAW/')dir 输出结果为一个列表,其中包含所有子文件夹,内容如下 12345678910['GSM5004183_NT1', 'GSM5004182_PT3', 'GSM5004181_PT2', 'GSM5004184_LN1', 'GSM5004189_Li2', 'GSM5004187_P1', 'GSM5004180_PT1', 'GSM5004185_LN2', 'GSM5004186_O1', 'GSM5004188_Li1'] 接下来批量读取,并将对象合并在一起 123456789101112# for循环读取adata = {}for i in range(len(dir)): data = sc.read_10x_mtx('../data/GSE163558_RAW/' + dir[i], var_names='gene_symbols', cache=True) data.var_names_make_unique() adata[dir[i]] = data print(dir[i]) adata = sc.concat(adata,label='sampleid')adata.obs_names_make_unique()adata 最后输出的adata是一个只有54687个基因,33538个基因的初始AnnData对象,obs为每一个细胞所属的样本 输出结果为: 12AnnData object with n_obs × n_vars = 54687 × 33538 obs: 'sampleid' 然后进行一些数据探索 123456789101112131415161718192021222324252627282930# 每个样本里的细胞数量adata.obs.value_counts()## 输出结果为:# sampleid # GSM5004189_Li2 11164# GSM5004181_PT2 9226# GSM5004185_LN2 7940# GSM5004186_O1 5937# GSM5004187_P1 5277# GSM5004184_LN1 4227# GSM5004182_PT3 3925# GSM5004180_PT1 2866# GSM5004183_NT1 2777# GSM5004188_Li1 1348# Name: count, dtype: int64# 表达矩阵的数值范围np.min(adata.X),np.max(adata.X)## 输出结果为:# (0.0, 36123.0)# 基本过滤# 过滤前的细胞数和基因数adata.X.shape## 输出结果为:# (54687, 33538)# 每个细胞中表达多少基因adata.obs.head()## 输出结果为一个表格 保存上面的每个样本中的细胞数为一个csv文件: 1temp = adata.obs.sampleid.value_counts() 查看感兴趣的基因表达矩阵:稀疏矩阵不支持直接查看,所以我们转化为数据框 转化为矩阵会丢失行名列名 1adata[0:6,['CD3D','TCL1A','MS4A1']].to_df() 数据质控 主要目的:对低表达基因和低质量细胞进行过滤 首先计算每个细胞中线粒体基因、核糖体基因、红血细胞基因表达比例 12345678# 计算线粒体基因表达比例adata.var['mt'] = adata.var_names.str.startswith('MT-')# 计算核糖体基因表达比例adata.var['ribo'] = adata.var_names.str.match('^RP[SL]')# 计算红血细胞基因比例adata.var['hb'] = adata.var_names.str.match('^HB[^(P)]')# 计算sc.pp.calculate_qc_metrics(adata, qc_vars=['mt', 'ribo', 'hb'], percent_top=None, log1p=False, inplace=True) 查看每个基因表达情况 1adata.var.head() 结果如图: 查看每个细胞的比例 1adata.obs.head() 结果如图: 可视化上述常见参数 1sc.pl.violin(adata,['n_genes_by_counts','total_counts','pct_counts_mt'],groupby='sampleid',jitter=False,rotation=90) 结果如图: 过滤接下来对数据进行过滤,代码如下,可以根据具体情况调整参数 123456789# 过滤细胞,每个细胞中至少有200个基因表达sc.pp.filter_cells(adata, min_genes=200)# 过滤基因,至少在5个细胞中表达sc.pp.filter_genes(adata, min_cells=5)# 过滤细胞:大于8000个基因过滤adata = adata[adata.obs.n_genes_by_counts < 8000, :]# 过滤细胞:线粒体基因比例大于0.2过滤adata = adata[adata.obs.pct_counts_mt < 20, :].copy()adata 输出结果为: 1234AnnData object with n_obs × n_vars = 44238 × 26480 obs: 'sampleid', 'n_genes_by_counts', 'total_counts', 'total_counts_mt', 'pct_counts_mt', 'total_counts_ribo', 'pct_counts_ribo', 'total_counts_hb', 'pct_counts_hb', 'n_genes' var: 'mt', 'ribo', 'hb', 'n_cells_by_counts', 'mean_counts', 'pct_dropout_by_counts', 'total_counts', 'n_cells' uns: 'sampleid_colors' 因此,过滤后还剩下:44238个细胞,26480个基因 降维聚类接下来就是标准流程 1234567891011121314151617# 首先将数据矩阵标准化sc.pp.normalize_total(adata, target_sum=1e4)# 对数据进行对数转换sc.pp.log1p(adata)adata.raw = adata.copy()# 选择高变基因sc.pp.highly_variable_genes(adata)# 归一化sc.pp.scale(adata)# PCA降维sc.tl.pca(adata, use_highly_variable=True)# harmony 整合sc.external.pp.harmony_integrate(adata, 'sampleid')# 聚类sc.pp.neighbors(adata, use_rep='X_pca_harmony',n_pcs=30)sc.tl.umap(adata)sc.tl.leiden(adata, flavor='igraph', n_iterations=2, resolution=0.5) 到这里基本分析完成,降维聚类分群,harmony去批次,我们再看一下数据变化 1234567AnnData object with n_obs × n_vars = 44238 × 26480 obs: 'sampleid', 'n_genes_by_counts', 'total_counts', 'total_counts_mt', 'pct_counts_mt', 'total_counts_ribo', 'pct_counts_ribo', 'total_counts_hb', 'pct_counts_hb', 'n_genes', 'leiden' var: 'mt', 'ribo', 'hb', 'n_cells_by_counts', 'mean_counts', 'pct_dropout_by_counts', 'total_counts', 'n_cells', 'highly_variable', 'means', 'dispersions', 'dispersions_norm', 'mean', 'std' uns: 'log1p', 'hvg', 'pca', 'neighbors', 'umap', 'leiden' obsm: 'X_pca', 'X_pca_harmony', 'X_umap' varm: 'PCs' obsp: 'distances', 'connectivities' 这时候除了obs,var还多了很多其他数据: obs:保存每个细胞对应的表型信息,对应Seurat里的metadata var:对应每一个基因的相关信息 uns:对应字典类型的元素,保存了如hvg,umap等信息 obsm:保存的空间坐标 常规绘图 相关性: total_counts和n_genes_by_counts的相关性: 12sc.pl.scatter(adata, x='total_counts', y='n_genes_by_counts') 结果如图: 绘制聚类图 12# 绘制PCA图,并根据sampleid进行着色sc.pl.pca(adata, color='sampleid') 提取坐标和聚类数据 12345678910111213import pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltpca_df = pd.DataFrame({ 'PC_1': adata.obsm['X_pca'][:, 0], 'PC_2': adata.obsm['X_pca'][:, 1], 'Cluster': adata.obs['leiden']})pca_df.head()# 主成分贡献度:sc.pl.pca_variance_ratio(adata, log=True, n_pcs=50) umap图 绘图代码为: 123456789101112sc.pl.umap(adata,color=['leiden'],legend_loc='on data',size=5)# 提取umap图的坐标import pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltumap_df = pd.DataFrame({ 'UMAP_1': adata.obsm['X_umap'][:, 0], 'UMAP_2': adata.obsm['X_umap'][:, 1], 'Cluster': adata.obs['leiden']})umap_df.head() 结果如图所示:","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"},{"name":"experience","slug":"daily/experience","permalink":"https://xyuechen/github.io/categories/daily/experience/"}],"tags":[{"name":"experience","slug":"experience","permalink":"https://xyuechen/github.io/tags/experience/"}]},{"title":"hexo_迁移","slug":"hexo-迁移","date":"2025-02-24T12:14:57.000Z","updated":"2025-02-24T12:30:18.175Z","comments":true,"path":"2025/02/24/hexo-迁移/","link":"","permalink":"https://xyuechen/github.io/2025/02/24/hexo-%E8%BF%81%E7%A7%BB/","excerpt":"","text":"最近换了电脑,因此想将原始文件夹转移到新电脑上 直接复制直接将原电脑上的文件夹打包,利用网盘/移动硬盘转移,在新电脑配置好环境后复制过来,这里由于我的博客数量很少,所以可以直接复制,那么当我们的文件夹很大时,最好还是利用GitHub进行迁移 网络迁移首先,我们应该配置新电脑的环境,这一点在之前的hexo配置中介绍过,不再赘述 然后新建一个文件夹,并初始化为blog文件夹,接着clone你的blog仓库,将source,theme等资源文件复制过来 但是这种操作只能转移内容,而不能转移配置 另一种方法 原电脑操作: 给你的博客仓库新建一个分支,并设为默认分支,例如hexo 找到一个目录,使用git clone将仓库克隆到本地,删除除了.git外的所有内容 命令行将本地清空的仓库推送到hexo分支 将清空的仓库中的.git文件夹复制到博客目录下 将博客目录下的themes中每个主题文件夹下的.git和.gitgnore删掉 将上述博客目录推送到hexo分支 新电脑: 创建好空文件夹后,git clone 进入目录后,npm install,hexo g,hexo s,如无意外就可以看到原始内容了 🧐 好复杂啊。。我还是直接复制吧","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"conda环境迁移","slug":"conda环境迁移","date":"2024-11-14T11:05:10.000Z","updated":"2024-11-14T11:13:44.000Z","comments":true,"path":"2024/11/14/conda环境迁移/","link":"","permalink":"https://xyuechen/github.io/2024/11/14/conda%E7%8E%AF%E5%A2%83%E8%BF%81%E7%A7%BB/","excerpt":"","text":"前言在笔记本上配置好环境后发现同样的步骤在另一个电脑上无论如何都无法成功,于是想有没有一个办法无痛转移环境 迁移首先将已经配置好并确定可以使用的环境打包压缩,然后发送/转移到另一个电脑上 解压后进行如下操作 12conda env listconda config --append envs_dirs D:\\ProgramAPP\\anaconda\\envs\\test","categories":[],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"},{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/tags/experient/"}]},{"title":"如何打开并贡献文档仓库","slug":"如何打开并贡献文档仓库","date":"2024-11-14T09:02:45.000Z","updated":"2024-11-14T09:04:52.000Z","comments":true,"path":"2024/11/14/如何打开并贡献文档仓库/","link":"","permalink":"https://xyuechen/github.io/2024/11/14/%E5%A6%82%E4%BD%95%E6%89%93%E5%BC%80%E5%B9%B6%E8%B4%A1%E7%8C%AE%E6%96%87%E6%A1%A3%E4%BB%93%E5%BA%93/","excerpt":"","text":"前言git作为常用的版本管理工具,我们应该学会如何使用git与文档仓库连接 本文以GitHub为例 配置我们使用git连接github 1ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 这里的email填入注册GitHub用的邮箱 1ssh-add ~/.ssh/id_rsa 然后将~/.ssh/id_rsa.pub的内容复制到GitHub中,通过下面的命令验证是否连接 1ssh -T git@github.com 如果显示“welcome……”就表示连接成功 打开远程仓库我们可以直接clone到本地进行编辑 12cd ~/Document/git clone git@github.com:respo/respo.git 上面的地址根据具体情况填入 贡献开源代码对于自己创建的仓库,可以在本地的项目文件夹运行 12345git initgit add .git commit -m"the first commit"git remote add origin git@github.com:xyuechen/practice.git //关联远程仓库git push -u origin master -f 但是对于别人的项目,我们可以先将项目fork一份副本,再拉取请求 我目前修改了一份文档,并希望将它推送到GitHub这时候可以 12345git remote add origin https://github.com/SongshGeo/Shuang-Team.gitgit checkout feat.xutestgit add .git commit -m"modified keywords"git push origin feat.xutest:feat.xutest 没报错就表示推送成功了,可以在GitHub查看一下 保持更新如果拉取的远程代码改变了,我们希望本地代码同步变化 123git remote add upstream https://github.com/SongshGeo/Shuang-Team.gitgit remote -vgit fetch upstream","categories":[],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"动态规划","slug":"动态规划","date":"2024-09-05T07:54:44.000Z","updated":"2024-09-05T08:12:00.000Z","comments":true,"path":"2024/09/05/动态规划/","link":"","permalink":"https://xyuechen/github.io/2024/09/05/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/","excerpt":"","text":"步骤 定义状态:确定问题的状态表示 状态转移方程(核心步骤):建立状态之间的递推关系。通常,当前状态最优解可通过之前计算的状态最优解得到 初始化:确定初始状态的值或设置起始条件 计算最优解:根据状态转移方程,逐步计算所有可能的状态的值 示例假设有一个二维的网络,每个单元格中有一个非负整数,目标为从左上角到右下角,每次只能向右或向下移动,要求路径上的数字之和最小 定义状态:定义dp[i][j]为到达第i行第j列的最小路径和 状态转移方程:由于只能向右或向下移动,因此,状态转移方程为 $dp[i][j] = min(dp[i-1][j],dp[i],[j-1]) + grid[i][j]$ 这里grid[i][j]是网格中第i行第j列的值 初始化条件:初始化左上角的值dp[0][0] = grid[0][0];第一行只能从左边来,所以dp[0][j] = dp[0][j-1] + grid[0][j];第一列只能从上面来,所以dp[i][0] = dp[i-1][0] + grid[i][0] 填充DP表:按行或按列迭代填充整个DP表,最终dp[m-1][n-1]将包含从左上角到右下角的最小路径和 代码展示这里使用python代码 1234567891011121314151617181920212223def minPathSum(grid): if not grid or not grid[0]: return 0 m, n = len(grid), len(grid[0]) dp = [[0] * n for _ in range(m)] # 初始化起点 dp[0][0] = grid[0][0] # 初始化第一行和第一列 for i in range(1, m): dp[i][0] = dp[i-1][0] + grid[i][0] for j in range(1, n): dp[0][j] = dp[0][j-1] + grid[0][j] # 填充剩余的dp表 for i in range(1, m): for j in range(1, n): dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j] return dp[m-1][n-1]","categories":[{"name":"experience","slug":"experience","permalink":"https://xyuechen/github.io/categories/experience/"}],"tags":[]},{"title":"R多环境管理","slug":"R多环境管理","date":"2024-07-04T14:39:58.000Z","updated":"2025-08-18T01:32:17.072Z","comments":true,"path":"2024/07/04/R多环境管理/","link":"","permalink":"https://xyuechen/github.io/2024/07/04/R%E5%A4%9A%E7%8E%AF%E5%A2%83%E7%AE%A1%E7%90%86/","excerpt":"","text":"安装一直想找到一个像anaconda那样管理python环境来管理R环境的工具,今天正好看到一个,尝试一下 1winget install posit.rig 在Windows终端中运行上述命令下载,重启终端即可运行 其他操作系统的命令 1234567891011121314151617# macOSbrew tap r-lib/rigbrew install --cask rigbrew upgrade --cask rig # 更新命令# linux## ubuntu和debian`which sudo` curl -L https://rig.r-pkg.org/deb/rig.gpg -o /etc/apt/trusted.gpg.d/rig.gpg`which sudo` sh -c 'echo "deb http://rig.r-pkg.org/deb rig main" > /etc/apt/sources.list.d/rig.list'`which sudo` apt update`which sudo` apt install r-rig## rhel、fedora、centOS、Rocky Linux、Almalinux等`which sudo` yum install -y https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm## opensuse和SLES`which sudo` zypper install -y --allow-unsigned-rpm https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm## 任意Linux发行版curl -Ls https://github.com/r-lib/rig/releases/download/latest/rig-linux-$(arch)-latest.tar.gz | `which sudo` tar xz -C /usr/local 用法 列出当前安装的R:rig list,类似于conda env --list 查看所有命令和示例:rig,类似于conda 查看帮助文档:rig --help,类似于conda --help 命令列表 123456789101112131415161718rig add -- install a new R version [alias: install]rig available -- List R versions available to install.rig default -- print or set default R version [alias: switch]rig library -- manage package libraries [alias: lib] (experimental)rig list -- list installed R versions [alias: ls]rig resolve -- resolve a symbolic R versionrig rm -- remove R versions [aliases: del, delete, remove]rig rstudio -- start RStudio with the specified R versionrig run -- Run R, an R script or an R projectrig sysreqs -- manage R-related system libraries and tools (experimental) (macOS)rig system -- manage current installations# windows子命令rig system add-pak -- install or update pak for an R versionrig system clean-registry -- clean stale R related entries in the registryrig system make-links -- create R-* quick linksrig system rtools -- manage Rtools installationsrig system setup-user-lib -- set up automatic user package libraries [alias: create-lib]rig system update-rtools40 -- update Rtools40 MSYS2 packages IDE我们可以下载positran来管理切换环境,不过目前还在测试阶段","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"R","slug":"R","permalink":"https://xyuechen/github.io/tags/R/"}]},{"title":"arch之hyprland","slug":"arch之hyprland","date":"2024-07-04T13:35:18.000Z","updated":"2024-07-04T13:58:30.000Z","comments":true,"path":"2024/07/04/arch之hyprland/","link":"","permalink":"https://xyuechen/github.io/2024/07/04/arch%E4%B9%8Bhyprland/","excerpt":"","text":"之前试图在硬盘arch中安装nvidia驱动再安装hyprland,导致系统直接挂了,现在来试试在虚拟机中直接安装试试 官网Hyprland 安装12sudo pacman -S hyprlandyay -S hyprland-git 上面两种方法任选一个 配置123mkdir -p ~/.config/hyprlandcp /usr/share/hyprland/hyprland.conf ~/.config/hyprlandvim ~/.config/hyprland/hyprland.conf 编辑配置文件 找到$mainMod这一行,后面都是快捷键配置,其中$的字符表示应该被替换的","categories":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"}],"tags":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"},{"name":"archlinux","slug":"archlinux","permalink":"https://xyuechen/github.io/tags/archlinux/"}]},{"title":"arch软件安装以及美化","slug":"arch软件安装以及美化","date":"2024-07-04T02:18:19.000Z","updated":"2026-01-06T11:44:05.124Z","comments":true,"path":"2024/07/04/arch软件安装以及美化/","link":"","permalink":"https://xyuechen/github.io/2024/07/04/arch%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85%E4%BB%A5%E5%8F%8A%E7%BE%8E%E5%8C%96/","excerpt":"","text":"软件安装浏览器1sudo pacman -Syu firefox 安装后中文无法显示,我们可以安装中文字体 1sudo pacman -Syu noto-fonts-cjk 登出后再重新登录即可看到正常的中文 中文输入法我们选择fcitx5的输入法 12sudo pacman -S fcitx5-imsudo pacman -S fcitx5-chinese-addons fcitx5-rime qt5-wayland 安装后编辑环境变量文件/etc/environment,在其中添加 123456# /etc/environmentQT_QPA_PLATFORM=waylandGTK_IM_MODULE=fcitxQT_IM_MODULE=fcitxXMODIFIERS=@im=fcitxSDL_IM_MODULE=fcitx 打开fcitx5-configuration这个软件,将右边的input_method中的pinyin加入到左边 蓝牙12sudo pacman -S bluezsudo systemctl enable bluetooth visual studio code1yay visual-studio-code-bin 提示没有yay,那么我们安装一下yay 12345678910cd /optsudo git clone https://aur.archlinux.org/yay.gitcd /opt/yaysudo chown -R username:username .export GOPROXY=https://proxy.golang.com.cn,directmakepkg -siyayyay -Yccd ..sudo rm -rf yay/ 安装成功后再安装vscode,即可成功 音乐1yay yesplaymusic terminal1sudo pacman -S gnome-terminal-transparency 微信和wps12yay wechat-universal-bwrapyay wps-office deb安装包有时候第三方软件会以deb的格式出现,这种文件在arch中的安装步骤如下 12345yay debtapsudo debtap -ucd Downloadsdebtap *.debsudo pacman -U package_name 或者还可以 12yay -S dpkgdpkg -i *.deb 下载助手windows上的internet download manager可以实现多线程快速下载,但是这个软件在linux上无法使用,我们可以使用替代品fdm 1yay freedownloadmanager java 注: archlinux官方只支持openjdk 刚安装的java环境需要 source /etc/profile 或者注销重新登陆来完成识别 务必使用 archlinux-java编辑 /usr/lib/jvm/default 和 /usr/lib/jvm/default-runtime 这两个链接 下载 1sudo pacman -S jdk-openjdk 使用archlinux-java管理java环境 查看环境:archlinux-java status 切换环境:archlinux-java set <JAVA_ENV_NAME> 时间同步1sudo timedatectl set-ntp true 美化gnome拓展首先要下载必要的一些软件 123456sudo pacman -S gnome-extensionssudo pacman -S gnome-tweaksyay ocs-urlgit clone https://aur.archlinux.org/chrome-gnome-shell.gitcd chrome-gnome-shellmakepkg -si 进入gnome拓展官网 https://extensions.gnome.org/ 我们可以在tweaks中打开gnome的最大化和最小化 首先安装input method panel 美化输入法安装的几个插件 1234567input method panelblur my shellAppIndicator and KStatusNotifierItem SupportCompiz alike magic lamp effectdash to dockjust perfectionhide topbar 还原点1yay aura-bin 我们可以使用aura -b设置还原点,通过aura -b restore来回到之前的还原点 终端美化首先下载zsh及相关软件 1sudo pacman -S zsh zsh-theme-powerlevel10k zsh-autosuggestions zsh-syntax-highlighting 这里powerlevel10k找不到,因为已经移到了aur库中,可以通过yay 下载 下载不了,我们直接从github下载首先对github加速 1git config --global url."https://gitclone.com/".insteadOf "https://github.com/" 配置文件在~/.gitconfig中但是使用yay的时候我们必须取消加速 1git config --global --unset url.https://github.com/.insteadOf 配置好了加速后下载 12git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10kecho 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc 在~/.zshrc中输入 1ZSH_THEME="powerlevel10k/powerlevel10k" 下载成功后更换默认shell 12chsh -lchsh -s /bin/zsh # 换成自己的路径 然后按指引配置就行","categories":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"}],"tags":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"},{"name":"archlinux","slug":"archlinux","permalink":"https://xyuechen/github.io/tags/archlinux/"}]},{"title":"arch-install的使用","slug":"arch-install的使用","date":"2024-07-04T01:18:34.000Z","updated":"2024-07-04T02:10:26.000Z","comments":true,"path":"2024/07/04/arch-install的使用/","link":"","permalink":"https://xyuechen/github.io/2024/07/04/arch-install%E7%9A%84%E4%BD%BF%E7%94%A8/","excerpt":"","text":"arch-install的使用由于arch的安装较为繁琐,因此出现了一种arch-install的工具,今天在虚拟机上试一试 首先创建一个虚拟机并且连接网络,更换镜像源:编辑文件/etc/pacman.d/mirrorlist 在最上面加上Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch 输入archinstall进入安装程序 其中,语言中有简体中文,但是直接设置会导致乱码,我们还需要下载字体,因此我们直接使用英文安装 mirror中我们选择第一个,找到China,空格选中,回车确认 locale默认即可,不用修改 disk configuration 我们可以直接选择第一个自动分区,进入后再选择ext4分区 bootloader可以选默认或grub,由于我希望使用这个虚拟机作用移动系统的试验机,因此我选择grub hostname设置机器名称 rootpasswd设置管理员密码 usercount设置用户,我们可以在这里新添用户并且赋予管理员权限 profile可以选择想要的桌面环境,由于硬盘中我选择的是gnome,因此这里也选择gnome,这里还可以选择显卡驱动,我试试nvidia显卡驱动能不能正常安装 optional repositories中选择第一个 然后下载安装,等待片刻 重启后即可进入系统(nvidia还是安装失败了,重新设置了一遍才启动)","categories":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"}],"tags":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"},{"name":"archlinux","slug":"archlinux","permalink":"https://xyuechen/github.io/tags/archlinux/"}]},{"title":"linux to go 移动硬盘制作","slug":"linux-to-go-移动硬盘制作","date":"2024-06-17T13:17:33.000Z","updated":"2024-06-18T01:46:04.000Z","comments":true,"path":"2024/06/17/linux-to-go-移动硬盘制作/","link":"","permalink":"https://xyuechen/github.io/2024/06/17/linux-to-go-%E7%A7%BB%E5%8A%A8%E7%A1%AC%E7%9B%98%E5%88%B6%E4%BD%9C/","excerpt":"","text":"前言去年曾经购置过一个移动硬盘,希望改装成ArchLinux的启动盘,因为种种原因未能成功,移动硬盘就变成了一个数据盘,今年由于经常使用服务器跑代码,希望重新捡起来Linux系统的操作(wsl也下载了,但是感觉不如Ubuntu-desktop方便),因此又萌生了Linux启动盘的想法,特此记录过程 操作过程教程来源于【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装/引导文件迁移/显卡驱动安装等问题-CSDN博客 那么就开始吧 操作步骤文件下载首先是准备好移动硬盘,Linux系统镜像(ubuntu下载地址Download Ubuntu Desktop | Ubuntu),分盘工具(DiskGenius – 正式版下载|免费下载) 分盘由于我的硬盘中已经有数据了,所以我先备份数据,再删除分区 右击磁盘然后删除当前分区 然后转化分区为GUID格式 怎么看自己的硬盘是不是GUID格式?可以单击硬盘后点击上方的磁盘选项,其中转化为GUID格式是灰色的则表示这个硬盘已经是GUID格式了 然后建立esp分区 接下来同样的建立其他分区,注意格式和大小,最后的分区情况如图所示 然后将备份的数据还原到F盘中 准备启动U盘下载软件UltraISO,地址最新UltraISO官方免费下载 - UltraISO软碟通中文官方网站 将一个空白的U盘插入电脑 在这里打开下载的镜像文件,然后点击启动->写入硬盘映像 依次点击 便捷启动 -> 写入新的驱动器引导扇区 -> Syslinux -> 写入 读条结束后即可 安装系统这一步由于在BIOS中进行,没有截图显示,仅记录一些要点以及我遇到的问题 我的电脑为2019款联想拯救者y7000,在重启/开机时按F2并不能进入BIOS界面 我们可以在Windows中依次点击 设置 -> windows更新 -> 高级选项 -> 恢复 -> 高级启动 -> 立即重启,从而进入BIOS界面 U盘插入但是设备中没有linpus lite,这可能是因为U盘的问题,我换了个U盘就成功了 安装过程中记得联网,以及一定要检查设置盘时除去之前安排给Linux的四个区域,其余区域都处于不使用此分区 安装后会重启,记得拔下U盘后按enter 这里教程中说应该选择enrool mdk,但是我在这一步的时候无法选择,只能强制关机,再重启后已经没有这个选项了,只有reset mdk,我拿不准这二者是不是一样的,于是选择了continue boot,也启动成功了,不确定这里后续会不会有问题 重启时可能会进入grub界面,如果想回到Windows系统可以这样操作 1234lsls (hd0,1)/efi/microsoft/boot/bootmgfw.efiroot=(hd1,1)boot 这里第二行要遍历所有分区找到这个文件再进行下一步 到这里差不多安装完成,后续是一些设置 系统设置将系统启动引导转移到移动硬盘上以避免每次都要选择系统 将硬盘和U盘都插上电脑,开机进入BIOS选择试用unbuntu,连接网络,然后在终端输入 1234sudo apt-add-repository ppa:yannubuntu/boot-repairsudo apt updatesudo apt install boot-repairboot-repair 选择“推荐修复”,等待程序运行完成即可 返回Windows系统,可以看到 esp分区中出现了efi,那么我们就可以删除主硬盘中的ubuntu了 至此便初步大功告成了,之后可以根据需要对Ubuntu安装软件和美化 后续:在拔下硬盘启动电脑时发生一直在logo界面闪退的现象,进入BIOS发现启动引导中仍然存在linpus lite,尽管我没有插U盘 解决:使用bootice软件将efi选项中多余的删除,即可正常开机了。","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"tensorflow下载过程","slug":"tensorflow下载过程","date":"2024-06-14T01:34:49.000Z","updated":"2024-06-14T01:44:58.000Z","comments":true,"path":"2024/06/14/tensorflow下载过程/","link":"","permalink":"https://xyuechen/github.io/2024/06/14/tensorflow%E4%B8%8B%E8%BD%BD%E8%BF%87%E7%A8%8B/","excerpt":"","text":"前言我在一年前曾写过一个tensorflow的安装流程笔记,但是今天再次安装发现存在一些问题,因此重新撰写 版本之前的笔记中我没有意识到python,tensorflow,cuda,cudnn的对应关系,这次在服务器上安装就掉坑里了,因此在安装前首先要注意需要下载的版本,以及自己的cuda和cudnn版本 我使用的是python = 3.9,tensorflow==2.10.0,cuda==11.3.1,cudnn==8.2.1 具体步骤为 12345conda create -n env_name python=3.9conda activate env_nameconda install cudatoolkit==11.3.1conda install cudnn==8.2.1pip install tensorflow==2.10.0 -i source 这样就初步安装成功了 验证在之前的验证中我只验证了tensorflow是否安装成功,而没有检测能否使用GPU,因此将验证命令更新如下 1234567import tensorflow as tfprint(tf.__version__)print(tf.test.is_gpu_available())print(tf.test.gpu_device_name())print(tf.config.list_physical_devices('GPU'))print("Num GPUs Available: ",len(tf.config.experimental.list_physical_devices('GPU'))) 运行结果中出现这个True表示识别成功","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"}]},{"title":"Autodl的使用","slug":"Autodl的使用","date":"2024-06-01T06:38:56.000Z","updated":"2024-06-14T01:44:42.000Z","comments":true,"path":"2024/06/01/Autodl的使用/","link":"","permalink":"https://xyuechen/github.io/2024/06/01/Autodl%E7%9A%84%E4%BD%BF%E7%94%A8/","excerpt":"","text":"创建实例首先登录网页AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 注:记得进行学生认证 按照自己的需求选择,我希望进行深度学习,同时预算不高,因此我选择按量计费以及3090 这里可以选择需要预先安装的框架,我们选择Miniconda,依赖之后再安装 这样就创建成功了,主要登陆的指令在ssh登录里面,我们可以使用Xshell来进行连接,也可以直接点击JupyterLab来进行连接 连接实例我们选择直接点击JupyterLab进行连接 如图所示,连接成功 我们也试一下xftp连接 首先复制连接指令ssh -p 53669 root@connect.yza1.seetacloud.com 这段指令中: 53669:端口号 root:用户名 connect.yza1.seetacloud.com:主机host 密码:在网页上 按照上图填入xftp中即可 配置环境 输入vim ~/.bashrc 在最后加上source /root/miniconda3/etc/profile.d/conda.sh 输入bash刷新一下实例 激活环境conda activate base 创建新环境conda create -n happy python=3.10,这里happy是我的环境名称 进入新环境conda activate happy 下载包autodl的官网帮助文档中有关于pytorch安装的说明 注:安装conda install ipykernel,然后输入ipython kernel install --user --name=happy来更新页面 可以将requirement.txt传输到服务器上再下载 java环境配置有些包需要Java环境,因此我们也安装一下java 首先从官网下载对应的文件Java Downloads | Oracle 下载好后使用xftp传输到服务器上的/usr/local的位置上,解压 解压命令为tar -zvxf zulu8.56.0.21-ca-jdk8.0.302-linux_x64.tar.gz 解压后配置环境变量,环境变量在/etc/profile文件中 输入vim /etc/profile进入编辑模式 然后输入 12345export JAVA_HOME=/usr/local/jdk1.8.0_321 #自己的安装目录export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATHexport JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/binexport PATH=$PATH:${JAVA_PATH} 保存退出,再刷新source /etc/profile 输入java -version来检验是否配置成功","categories":[{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/categories/experient/"}],"tags":[{"name":"dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"}]},{"title":"openslide安装","slug":"openslide安装","date":"2024-05-16T11:59:06.000Z","updated":"2024-06-14T01:44:52.000Z","comments":true,"path":"2024/05/16/openslide安装/","link":"","permalink":"https://xyuechen/github.io/2024/05/16/openslide%E5%AE%89%E8%A3%85/","excerpt":"","text":"openslide 下载在(Downloading OpenSlide)下载对应操作系统的二进制包,解压 为这个文件夹中的bin和lib添加环境变量 激活环境,在命令行中运行 1pip install Openslide-python 出现这行字表示成功安装 openslide 导入在环境中输入python 这个时候直接导入会报错 我们可以进行如下操作: 先加载os 12import osos.add_dll_directory("D:\\\\Users\\\\xuhui\\\\anaconda3\\\\Library\\\\openslide-win64-20231011\\\\bin") 再进行加载 成功导入","categories":[{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/categories/experient/"}],"tags":[{"name":"dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"}]},{"title":"torch_geometric安装","slug":"torch-geometric安装","date":"2024-05-12T03:32:42.000Z","updated":"2024-06-14T01:45:06.000Z","comments":true,"path":"2024/05/12/torch-geometric安装/","link":"","permalink":"https://xyuechen/github.io/2024/05/12/torch-geometric%E5%AE%89%E8%A3%85/","excerpt":"","text":"torch_geometric安装过程环境+版本检查首先打开anaconda虚拟环境 我这里已经有一个下载好的pytorch环境,激活并查看相关信息 下载必要的依赖找到[GitHub](pyg-team/pytorch_geometric: Graph Neural Network Library for PyTorch (github.com))的地址,点击Additional Libraries中的here 找到对应的pytorch和cuda版本,点击进去 其中一共有四种依赖,下载下来,如图所示 安装依赖打开虚拟环境,进入上述四个文件的目录下 然后依次安装 torch_scatter 1pip install torch_scatter-2.0.9-cp36-cp36m-win_amd64.whl torch_sparse 1pip install torch_sparse-0.6.12-cp36-cp36m-win_amd64.whl torch_cluster 1pip install torch_cluster-1.5.9-cp36-cp36m-win_amd64.whl torch_spline_conv 1pip install torch_cluster-1.5.9-cp36-cp36m-win_amd64.whl 安装torch_geometric,可以指定版本 1pip install torch_geometric -i https://mirrors.aliyun.com/pypi/simple 最后验证一下","categories":[{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/categories/experient/"}],"tags":[{"name":"-dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"}]},{"title":"hexo-git报错","slug":"hexo-git报错","date":"2024-04-20T09:35:02.000Z","updated":"2024-04-20T10:03:48.000Z","comments":true,"path":"2024/04/20/hexo-git报错/","link":"","permalink":"https://xyuechen/github.io/2024/04/20/hexo-git%E6%8A%A5%E9%94%99/","excerpt":"","text":"无法连接半年没用hexo,今天连接时发现需要输入用户名和密码,输入后报错,无法连接 遂重新配置一遍 首先配置一下git的用户名和邮箱 创建ssh密钥 在显示的路径下找到文件 复制里面的内容 上传密钥 验证连接 出现图中”Hi“后面的内容即连接成功","categories":[{"name":"dairy","slug":"dairy","permalink":"https://xyuechen/github.io/categories/dairy/"}],"tags":[{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/tags/hexo/"}]},{"title":"conda_set","slug":"conda-set","date":"2024-04-19T14:53:12.000Z","updated":"2024-06-14T01:44:46.000Z","comments":true,"path":"2024/04/19/conda-set/","link":"","permalink":"https://xyuechen/github.io/2024/04/19/conda-set/","excerpt":"","text":"conda修改环境路径conda 默认的环境路径在C:\\Users\\用户名\\conda中,C盘位置不够,因此希望修改到其余地方 在anaconda的终端输入 之后新建的环境就会出现再目标路径下了 conda修改jupyter notebook的默认文件夹在anaconda的终端找到jupyter的配置文件 打开文件,找到这几行 取消c.NotebookApp.notebook_dir这一行的注释,在单引号中写入目标路径 打开jupyter notebook的应用路径 将选中区域删除 配置完成 如果环境中没有jupyter,那么在终端输入conda install nb_conda即可 pytorch下载命令pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 jupyter设置新建的环境中没有jupyter,想要使用的话我们需要下载配置 首先下载 1pip install jupyter 下载后的界面如图 比较简陋,我们也无法进行代码自动补全 因此我们进行一些配置,在anaconda中输入 1234pip install jupyter_contrib_nbextensionsjupyter contrib nbextensions install --userpip install jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --user 安装后界面如下 选中hinterland,设置完成","categories":[{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/categories/experient/"}],"tags":[{"name":"dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"}]},{"title":"免费科学上网方法记录","slug":"免费科学上网方法记录","date":"2023-08-10T14:10:09.000Z","updated":"2023-08-10T14:20:18.000Z","comments":true,"path":"2023/08/10/免费科学上网方法记录/","link":"","permalink":"https://xyuechen/github.io/2023/08/10/%E5%85%8D%E8%B4%B9%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91%E6%96%B9%E6%B3%95%E8%AE%B0%E5%BD%95/","excerpt":"","text":"今天在油管上看到一个科学上网方法,记录一下 首先是[下载链接](1.1.1.1 — The free app that makes your Internet faster.),这是一个名为warp的软件,下载后可以免费获得1G的科学流量 但是这显然不够用 免费获取永久资格的方法有两种: 使用信用卡或者paypal注册一个CloudFlare的账号,选择团队套餐,$0的那个,就可以获得免费的流量 关注warp的telegram 我选择的是第二种 先使用免费的1G流量注册一个telegram账号(国内手机号可以使用),然后搜索warp+bot 如图所示,选择这个账号,进入后点击”/generate“,他会提醒你关注两个账号,关注后点击第三个”我已关注“,它会返给你几个计算题,算好后就会生成密钥,最后回到warp软件偏好设置中更换密钥,就可以获得花不完的流量啦 原视频链接:(10) 免费VPN的杀手!Warp+ 速度贼快,不限制流量,由大名鼎鼎的CloudFlare 提供,放心白嫖 | 零度解说 - YouTube","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"},{"name":"magic","slug":"magic","permalink":"https://xyuechen/github.io/tags/magic/"}]},{"title":"错误1006解决方案","slug":"错误1006解决方案","date":"2023-08-01T14:08:52.000Z","updated":"2023-08-01T14:32:00.000Z","comments":true,"path":"2023/08/01/错误1006解决方案/","link":"","permalink":"https://xyuechen/github.io/2023/08/01/%E9%94%99%E8%AF%AF1006%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/","excerpt":"","text":"记录一下今天离开电脑的时候没有关闭watt toolkit软件(并且它还开着GitHub加速),等我回来时电脑自动关机了 当时意识到大事不妙(以前也遇到过),果然,已经无法上网了,并且watt提示错误代码1006,主机拒绝访问 于是记录一下解决过程 首先搜索了一下“电脑连上网络但是无法上网怎么办” 一个解决方案说可以修改wlan的设置,双击IPv4 修改DNS设置(由于并没有用所以我就不贴上来了) 然后在edge里运行网络检测,提示“远程计算机或设备不接受连接”,搜索这个关键词 修复方法:打开控制面板(win+R再输入control)–> 连接 –> 局域网设置 –> 只勾选“自动检测设置” 这样就解决问题了","categories":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"},{"name":"error","slug":"daily/error","permalink":"https://xyuechen/github.io/categories/daily/error/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"picgo+github","slug":"picgo-github","date":"2023-07-30T14:52:14.000Z","updated":"2023-08-23T00:51:22.000Z","comments":true,"path":"2023/07/30/picgo-github/","link":"","permalink":"https://xyuechen/github.io/2023/07/30/picgo-github/","excerpt":"","text":"picgo下载[链接](PicGo (molunerfinn.com)) 下载安装后打开,进入 图床设置->github 填入相应的信息 token要在GitHub生成 生成token在GitHub新建一个仓库,取一个自己喜欢的名,(*这里取的是image*) 然后在设置里,拉到最下面,选择开发者选项 填入即可 typora设置由于app上传失败(不知道为什么,于是选择了插件模式) 选择这个模式并下载,接着在C盘中/APPData/Roaming文件夹下找到Typora文件夹,里面的/picgo/win64子文件夹,其中有一个.exe文件,不用管他,在路径中输入cmd打开终端,并按照下图输入 其中customUrl最后两个为你的用户名和仓库名,按照自身情况替换 接着输入picgo use uploader,回车后选择GitHub,成功后回到typora选择验证,在GitHub中看到图片即成功 这样就成功了","categories":[{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/categories/hexo/"}],"tags":[{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/tags/hexo/"}]},{"title":"archlinux的截图配置","slug":"archlinux的截图配置","date":"2023-07-30T14:25:43.000Z","updated":"2023-07-30T14:35:50.000Z","comments":true,"path":"2023/07/30/archlinux的截图配置/","link":"","permalink":"https://xyuechen/github.io/2023/07/30/archlinux%E7%9A%84%E6%88%AA%E5%9B%BE%E9%85%8D%E7%BD%AE/","excerpt":"","text":"下载选择的是flameshot 在终端输入 1sudo pacman -S flameshot-git 截图方式:在终端输入 1flameshot gui 快捷键配置 如上图所示,选择一个自己喜欢的快捷键即可","categories":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"}],"tags":[{"name":"archliux","slug":"archliux","permalink":"https://xyuechen/github.io/tags/archliux/"},{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"}]},{"title":"archlinux记录","slug":"archlinux记录","date":"2023-07-29T08:47:56.000Z","updated":"2024-07-04T04:38:16.000Z","comments":true,"path":"2023/07/29/archlinux记录/","link":"","permalink":"https://xyuechen/github.io/2023/07/29/archlinux%E8%AE%B0%E5%BD%95/","excerpt":"","text":"2023 年 7 月 26 日买的移动硬盘到了,于是决定搞个 archlinux 系统玩玩 遇到第一个错误虚拟机进入不了安装界面原因:内存分配太少了解决:多加点内存 安装过程参考 b 站的文章 https://www.bilibili.com/read/cv20753052?spm_id_from=333.999.0.0过程很详尽,可以直接对着操作 我使用的是 kde 的桌面于是遇到第二个错误:中文输入法fcitx 5 虽然很多人推荐,但是不知道什么毛病死活用不了最后还是下载了 ibus 美化使用了类苹果的主题 后来尝试下载 ohmyzsh遇到第三个问题:浏览器的文字不能复制到 vim 中(字数那么多全部打上去要我死)解决:sudo pacman -S gvim这样就可以复制了(必须使用 gvim) 接下来是最麻烦的一个问题,无法从 github 下载文件还在解决中clash 失败了最后使用的还是 v2ray 12yay -S v2raya-binsudo systemctl enable --now v2raya 这样就成功安装了,再使用 KDE 菜单打开浏览器地址,导入代理行吧,还是不能科学上网,ohmyzsh 也还是下载不了 2023 年 7 月 28 日今天继续美化oh-my-zsh 下载成功具体操作: 123git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zshcp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrcchsh -s /bin/zsh 第一步并没有 git 成功,我是直接在 github 把这个项目打包下载,再在 /home/xu 下复制并重命名为 .oh-my-zsh第三步其实也没有成功,我是直接在图形界面修改的接着编辑 /.zshrc 配置文件修改主题我选择的是 ys,也可以设置为 random,这样每次都是不一样的主题 2024年7月4号 时隔一年,再次捡起这个帖子,在上个月,参考2023年在移动硬盘上安装 Arch Linux 及网络/桌面/输入法/字体/声音/蓝牙驱动的配置 的视频,成功将arch安装到我的移动硬盘上,进行了一系列安装美化后,成功挂在了nvidia显卡驱动安装上,现在不仅无法开机,还丢失了在arch上写的笔记(心痛) 于是在blog上记录一下,重新安装的过程,防止再次丢失 首先,设置一个虚拟机,要点: USB控制器中选择相应的兼容 选项-高级中应该选择uefi引导,关闭Hyper-V通道缓解 虚拟机开机后将移动硬盘连接到虚拟机上,进入安装程序 查看当前硬盘情况1fdisk -l 如图所示,其中/dev/sdb为我们的移动硬盘,其中有我之前设置的Linux系统,我们格式化,重新操作 联网并且验证时钟同步1234ip linkping www.baidu.comip linktimedatectl 设置磁盘空间123fdisk /dev/sdbg # 新建分区表n # 新分区 这里扇区和起始点可以默认,大小需要手动分配,我们分配600M,即输入+600M 此后重复操作,第二个区域我们分配16G,第三个区域我们分配120G,然后输入t,设置分区类型,第一个区域的类型编号为1,第二个为19,第三个为23,然后输入p打印看一下,确认无误后输入w写入 分区设置首先设置文件系统类型 123mkfs.ext4 /dev/sdb3 # 创建文件系统mkswap /dev/sdb2mkfs.fat -F 32 /dev/sdb1 然后挂载 123mount /dev/sdb3 /mntmount --mkdir /dev/sdb1 /mnt/bootswapon /dev/sdb2 安装设置镜像为了安装更快,我们可以配置一个镜像源(以清华镜像源为例) 编辑文件/etc/pacman.d/mirrorlist,在顶端添加 1Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch 安装必备的文件1pacstrap -K /mnt base linux linux-firmware sof-firmware netwoekmanager vi vim man-db texinfo gnome 等待片刻即可 配置系统123456789101112131415genfstab -U /mnt >> /mnt/etc/fstabarch-chroot /mnt# 配置时区ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 同步时间hwclock --systohc# 语言vim /etc/locale.gen # 取消en_US:utf-8的注释,保存退出locale-gen # 生成语言vim /etc/locale.conf # 写入:LANG=en_US.UTF-8vim /etc/hostname # 写入系统名字,随意取pacman -S base-develuseradd -m username # 添加一个普通用户passwd username # 设置这个用户的密码visudo # 为这个用户添加管理权限,在这个文件中找到ALL,在下面添加一行 username ALL=(ALL:ALL) ALL 安装引导程序 1pacman -Syu grub efibootmgr amd-ucode intel-ucode 在这里会出现警告信息 解决方法:在/etc/pacman.conf中添加源 1Server = https://mirrors.tuna.tsinghua.edu.cn/arch4edu/$arch 然后输入 1234pacman-key --recv-keys 7931B6D628C8D3BApacman-key --finger 7931B6D628C8D3BApacman-key --lsign-key 7931B6D628C8D3BAyay -S upd72020x-fw 如果由于网速无法下载,那么可以 123git clone https://github.com/denisandroid/uPD72020x-Firmware ~/Desktop/firmwarecp ~/Desktop/firmware/UPDATE.mem ~/.cache/yay/upd72020x-fwcp ~/Desktop/firmware/License.rtf ~/.cache/yay/upd72020x-fw 继续我们的安装,接下来是开机引导程序 12grub-install --target=x86_64-efi --efi-directory=/boot/ --bootloader-id=GRUB --removablegrub-mkconfig -o /boot/grub/grub.cfg 开启开机服务 12systemctl enable gdmsystemctl enabel NetworkManager 安装完成,可以通过BIOS进入系统了","categories":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"}],"tags":[{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"},{"name":"archlinux","slug":"archlinux","permalink":"https://xyuechen/github.io/tags/archlinux/"}]},{"title":"hexo美化记录","slug":"hexo美化记录","date":"2023-07-29T04:21:36.000Z","updated":"2023-07-29T09:21:26.000Z","comments":true,"path":"2023/07/29/hexo美化记录/","link":"","permalink":"https://xyuechen/github.io/2023/07/29/hexo%E7%BE%8E%E5%8C%96%E8%AE%B0%E5%BD%95/","excerpt":"","text":"主题在网站(hexo)[Themes | Hexo]中可以查看别人的主题,下载并进行自己的美化 下载后文件会放在/themes目录下 更改blog文件夹下的_config.yml,修改主题 有能力的也可以修改模板文件进行自定义主题 文章分类生成的新文章头部会有一个说明 例如这篇博客的头部 在这一块加上 1categories: hexo 本地图片插入文章网页不显示关于这个问题,搜索后发现有几种方法: 修改配置文件 安装插件 手动插入 我尝试了一下,修改配置文件是指_config.yml 将这一行改成false,再将图片存放在与博客同名的文件夹中 这个方法没用 于是我又尝试了手动插入 在source文件夹下新建一个文件夹为image,再将图片存放在里面,博客里使用相对路径,如/image/assert.jpg这样就可以成功显示了 这个方法对我有用,于是没有尝试插件 插件网址:[插件](Plugins | Hexo) 待补充 背景图片几个可以找背景的网址: Awesome Wallpapers - wallhaven.cc 极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 (zzzmh.cn) Wallpaper Abyss - HD Wallpapers, Background Images (alphacoders.com) 这个网站有点慢,但是图很多 背景图片地址: E:\\projects\\blog\\blog\\themes\\diaspora\\source\\img 其中的disapora是主题名字,对应自己的主题名寻找,然后存进去 然后编辑主题的配置文件(主题文件夹下的_config.yml) 修改这几个参数就好,此处图片地址也为相对路径","categories":[{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/categories/hexo/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"}]},{"title":"我的hexo配置过程","slug":"我的hexo配置过程","date":"2023-07-29T01:46:35.000Z","updated":"2024-06-14T02:29:30.000Z","comments":true,"path":"2023/07/29/我的hexo配置过程/","link":"","permalink":"https://xyuechen/github.io/2023/07/29/%E6%88%91%E7%9A%84hexo%E9%85%8D%E7%BD%AE%E8%BF%87%E7%A8%8B/","excerpt":"","text":"起因前两天配置了一个archlinux,过程中遇到很多问题,想记录一下,忽然想起两年前做过的个人博客实验,于是打算重新捡起来 过程当初的实验并没有成功,于是我重新尝试了一下 遇到的问题:git bash中无法执行hexo,即使修改了环境变量也没用 在网上找到的解决方案: 建立一个空的blog文件夹,再执行: 1234npx hexo init blogcd blognpm installnpx hexo server 注:命令在blog文件夹打开终端执行 执行后打开 http://localhost:4000 就可以看到博客界面了 停止服务:在终端按下CTRL+C 新建博客:在终端输入npx hexo n "博客名字" 上传博客: npx hexo clean npx hexo g npx hexo s 再打开网页,就可以看到上传的博客了 上传到github: npx hexo d 有时候可能会出现错误:error: RPC failed; curl 35 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 这个时候可以先执行git config --global http.postBuffer 5242880000,再推送到GitHub","categories":[{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/categories/hexo/"}],"tags":[{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"},{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/tags/experient/"}]}],"categories":[{"name":"algorithm","slug":"algorithm","permalink":"https://xyuechen/github.io/categories/algorithm/"},{"name":"python","slug":"python","permalink":"https://xyuechen/github.io/categories/python/"},{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/categories/daily/"},{"name":"experience","slug":"daily/experience","permalink":"https://xyuechen/github.io/categories/daily/experience/"},{"name":"experience","slug":"experience","permalink":"https://xyuechen/github.io/categories/experience/"},{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/categories/linux/"},{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/categories/experient/"},{"name":"dairy","slug":"dairy","permalink":"https://xyuechen/github.io/categories/dairy/"},{"name":"error","slug":"daily/error","permalink":"https://xyuechen/github.io/categories/daily/error/"},{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/categories/hexo/"}],"tags":[{"name":"study","slug":"study","permalink":"https://xyuechen/github.io/tags/study/"},{"name":"daily","slug":"daily","permalink":"https://xyuechen/github.io/tags/daily/"},{"name":"experience","slug":"experience","permalink":"https://xyuechen/github.io/tags/experience/"},{"name":"experient","slug":"experient","permalink":"https://xyuechen/github.io/tags/experient/"},{"name":"R","slug":"R","permalink":"https://xyuechen/github.io/tags/R/"},{"name":"linux","slug":"linux","permalink":"https://xyuechen/github.io/tags/linux/"},{"name":"archlinux","slug":"archlinux","permalink":"https://xyuechen/github.io/tags/archlinux/"},{"name":"dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"},{"name":"-dl","slug":"dl","permalink":"https://xyuechen/github.io/tags/dl/"},{"name":"hexo","slug":"hexo","permalink":"https://xyuechen/github.io/tags/hexo/"},{"name":"magic","slug":"magic","permalink":"https://xyuechen/github.io/tags/magic/"},{"name":"archliux","slug":"archliux","permalink":"https://xyuechen/github.io/tags/archliux/"}]}