- 博客(49)
- 收藏
- 关注
原创 奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析
SVD是一个通用的矩阵分解工具,它揭示矩阵的核心结构,是实现 PCA 的一种常用且高效的方法。PCA是一种基于方差最大化的降维方法,它找到数据集中最重要的正交方向。FA是一种统计模型,旨在解释可观察变量背后的潜在共同因子。ICA是一种盲源分离方法,它寻找统计独立的潜在成分。简单来说,如果你需要高效地对数据进行降维并保留大部分信息,SVD/PCA是首选。如果你想解释数据背后的潜在结构和原因,FA可能更合适。如果你需要分离混合在一起的信号,ICA则是专门的工具。
2025-09-18 19:18:18
820
原创 Python 迭代器迭代对象装饰器生成器
文章摘要:Python中迭代器、可迭代对象、生成器和装饰器是四个关键概念。可迭代对象(如列表、字典)实现__iter__()方法返回迭代器;迭代器通过__next__()方法逐个访问元素;生成器使用yield关键字实现惰性计算,节省内存;装饰器通过@语法在不修改原函数的情况下添加功能。理解它们的区别有助于编写更高效、更Pythonic的代码。
2025-09-11 13:56:23
849
原创 python torch基础用法
本文档将全面、系统地介绍 PyTorch 的核心概念、基础用法和完整的工作流程,从张量的基本操作到神经网络的训练与保存,旨在为初学者提供一份详尽的参考手册。推荐使用官方网站提供的安装命令,它会根据你的操作系统、包管理器和 CUDA 版本生成最合适的安装指令。2. 从尾部维度开始比较,维度大小必须相等,或者其中一个为 1,或者其中一个不存在。否则,它会返回一个新的副本。,PyTorch 会追踪张量上的所有操作,以便在反向传播时计算梯度。极为相似,但在功能上,PyTorch 张量具有显著的优势。
2025-09-11 13:49:09
1299
原创 nuclio的配置文件yaml和docker compose的yaml的区别
Docker Compose与Nuclio Function对比摘要 Docker Compose(docker-compose.yml)是系统级编排工具,负责管理多容器应用的整体架构,包括服务、网络和数据卷的连接。而Nuclio Function(function.yaml)专注于单个无服务器函数的构建,定义代码、依赖和运行环境。两者协同工作:Docker Compose搭建基础平台(如Nuclio容器),Function.yaml则构建具体函数镜像并部署到平台上。主要区别在于Compose管理服务间协作
2025-06-09 16:01:16
1277
原创 nuclio
Nuclio是一个高性能无服务器函数平台,充当CVAT中AI模型的运行引擎。它通过标准化流程(使用function.yaml配置文件)将AI模型封装为可调用函数,实现低延迟、高并发的模型推理服务。在CVAT架构中,Nuclio与主服务解耦,专门处理计算密集型任务。部署时需使用nuctl命令行工具,常用命令包括deploy创建函数、invoke测试调用、logs查看日志等。典型应用场景如SegmentAnything模型,用户点击图像后,请求经CVAT后端转发至Nuclio函数执行,结果返回前端展示。Nucl
2025-06-09 11:48:28
1273
1
原创 CVAT标注服务
CVAT是一个Web视频/图像标注工具,采用微服务架构,包含6大核心模块:1)前端UI和后端服务器(Django)构成交互系统;2)PostgreSQL+Redis处理数据存储;3)Celery异步任务队列;4)Nuclio无服务器AI模型平台;5)Traefik网关和OPA权限控制;6)Vector+ClickHouse+Grafana监控体系。该架构通过容器化部署,实现了功能解耦、异步处理和高可用性,支持计算机视觉数据标注全流程。
2025-06-06 19:40:17
1284
原创 Opencl
OpenCL是一种跨平台的异构计算框架,支持CPU、GPU等设备并行计算,由Khronos Group制定标准。其核心概念包括平台、设备、上下文、命令队列和内核。开发流程通常分为主机程序(C/C++)和设备端内核代码(.cl文件)两部分。CMake可管理项目结构,将内核文件作为资源或预编译为二进制以提高安全性。在RK系列芯片上使用时需确认硬件支持并安装专用驱动,开发步骤与标准OpenCL一致。该框架通过统一编程接口实现高性能异构计算,广泛应用于各类加速场景。
2025-06-04 19:45:00
1893
原创 不同处理器指令集SIMD
摘要: SIMD指令集扩展(SSE、AVX、AVX-512、ARM NEON/SVE)通过单指令多数据并行处理提升计算效率,广泛应用于多媒体、科学计算及AI领域。Intel的SSE(128位)、AVX(256位)和AVX-512(512位)侧重x86平台的高性能浮点运算;ARM的NEON(128位)优化移动端多媒体处理,而SVE支持可变长向量(128-2048位),面向未来高性能计算。C++中可通过编译器自动向量化(-O3)、Intrinsic函数(如__m256)、库封装(Eigen)或汇编实现SIMD加
2025-06-04 14:55:29
1652
原创 编译器相关compiler
摘要:主流编译器比较及编译流程概述 主流编译器包括Intel ICC(针对Intel处理器优化)、GNU g++/gcc(跨平台开源)、Clang(快速易调试)和MSVC(Windows生态集成)。CMake可管理多编译器项目。 编译过程分为预处理(宏展开)、编译(生成汇编)、汇编(机器码生成)和链接(整合目标文件与库)。动态库(.so/.dll)在链接阶段生成,支持运行时共享代码。优化和调试选项(如-O3、-g)可在各阶段配置。
2025-06-04 14:21:34
535
原创 ubuntu chrome无法使用搜狗拼音输入法,无法输入中文
安装好搜狗输入法后用了很久,突然有一天点击chrome自动升级后就没法用了,在别的软件都能用,还以为是配置问题,就在网上搜了好一阵子才找到解决方案,各种找问题,最后发现是需要安装fcitx5-frontend-gtk4,估计是新版本有依赖不对。安裝後如果不能直接用,可以重启chrome试试。我现在的chrome版本。
2025-05-20 12:02:34
1457
2
原创 C++ 与 Python 内存分配策略对比
内存管理是编程中的一个核心概念,它直接影响程序的性能、稳定性和资源利用率。C++ 和 Python 作为两种广泛使用的编程语言,在内存分配和管理方面采用了截然不同的策略。C++ 赋予程序员对内存的精细控制能力,同时也带来了更大的责任。其主要的内存分配策略包括:静态内存分配 (Static Memory Allocation):时机: 编译时。存储位置: 程序的静态存储区(数据段或BSS段)。对象: 全局变量、文件作用域的 static 变量、类静态成员变量、函数内部的 static 局部变量。
2025-05-19 14:52:45
751
原创 C++ 中 std::vector<int> a 与 int a[10] 的区别
在 C++ 中,std::vector<int> a 和 int a[10] 都用于存储一系列整数,但它们在底层实现、功能和使用方式上有着本质的区别。理解这些区别对于编写高效、安全且易于维护的 C++ 代码至关重要。类型:这是一个内置的、静态大小的数组。数组的大小 10 必须在编译时确定,并且在程序运行期间不能改变。内存分配:栈分配 (Stack Allocation): 如果在函数内部定义(非 static),数组 a 通常在栈 (stack) 上分配内存。当函数返回时,这块内存会自动释放。 void
2025-05-19 14:49:36
836
原创 深度学习评价指标(混淆矩阵、精确率、召回率、F1 score...)
混淆矩阵(Confusion Matrix)是在机器学习领域中用来评估分类算法性能的一种矩阵。它是一个二维矩阵,用于比较模型预测结果和实际标签之间的差异。混淆矩阵的行表示实际类别,列表示预测类别,矩阵的每个元素表示模型在测试集中将一个类别的样本预测为另一个类别的样本的数量。混淆矩阵通常用于计算分类模型的精确度、召回率和 F1 分数等性能指标。
2025-03-21 11:34:23
1004
原创 ubuntu gcc g++版本切换
这个方法不会影响其他依赖于特定 GCC 版本的系统组件。如果你之后想恢复到 GCC 12.4,只需再次运行。的从属选项(slave alternative)。这种情况通常发生在系统之前被配置为单独管理。已经被设置为一个独立的主选项(master alternative),而不是。在每个命令后,你会看到一个菜单,选择对应的 gcc-9 和 g++-9。我们需要稍微调整一下方法来解决这个问题。的版本,这在某些情况下可能更灵活。在出现的菜单中选择 gcc-9。这种方法允许你单独管理。命令并选择相应版本。
2024-07-18 18:27:27
1578
原创 np.bincount、np.digitize、np.unique、np.histogram、np.searchsorted
np.bincount、np.digitize、np.unique、np.histogram、np.searchsorted函数
2023-07-29 17:03:49
1026
原创 C++ 文件和文件夹判断及访问(后缀过滤)ubuntu
#include <sys/stat.h>#include <vector>#include <string>#include <dirent.h>std::string scene = jsonParams["scenePath"]; const char* selectedScenePath = scene.c_str(); std::vector<std::string> scenePaths; if ...
2021-08-27 09:23:05
395
原创 机器学习基础(二)
本文总结了机器学习模型与性能指标的关键知识。逻辑回归用于分类问题,采用Sigmoid函数和交叉熵损失;线性回归用于连续值预测,使用均方误差。回归问题性能指标包括MSE、RMSE、MAE和R2;分类问题则关注准确率、精确率、召回率、F1分数及ROC/AUC。逻辑回归处理多分类可采用一对多或Softmax方法。全概率和贝叶斯公式用于概率计算,而朴素贝叶斯的"朴素"源于其特征独立性假设,虽不切实际但实践效果良好,尤其在文本分类领域。
2021-06-26 13:12:15
50
原创 机器学习基础(一)
1,为什么要对特征做归一化?归一化的目的是希望输入数据的不同维度的特征具有相近的取值范围,从而能够更快的通过梯度下降找到最优解。特征间的单位(尺度)可能不同,单位的不同会导致计算结果的不同,尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略,为了消除特征间单位和尺度差异的影响,以对每维特征同等看待,需要对特征进行归一化。原始特征下,因尺度差异,其损失函数的等高线图可能是椭圆形,梯度方向垂直于等高线,下降会走zigzag路线,而不是指向lo...
2021-06-26 13:05:44
273
原创 numpy 常用函数clip()
np.clip()np.clip(a, a_min, a_max, out=None) ## 是一个截取函数,用于截取数组中小于或者大于某值的部分,并使得被截取部分等于固定值,将数组限制在最小值和最大值之间# a:输入矩阵;# a_min:被限定的最小值,所有比a_min小的数都会强制变为a_min;# a_max:被限定的最大值,所有比a_max大的数都会强制变为a_max;# out:可以指定输出矩阵的对象,shape与a相同例:np.clip(a, 1, 8) # a数组
2021-02-24 20:02:27
2221
原创 ubuntu OpenCV卸载与安装
卸载$ dpkg -l |grep opencv ## 查看相关包$ sudo apt remove libopencv* --purge ### --purge 表示删除相关记录$ sudo apt remove opencv-qytech --purge ## 卸载qianyi opencv包(公司的)安装$ sudo apt install opencv-qytech ## 安装qianyi opencv包(公司的)查看$ pk
2021-02-24 19:46:08
360
原创 git 相关问题
git cloneQ:1 error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.2 fatal: The remote end hung up unexpectedly3 fatal: 过早的文件结束符(EOF)4 fatal: index-pack 失败A:法一:git config --global http.postBuffer 20000000法二:修改配置文件gedit ~
2021-02-23 21:42:17
261
原创 C++ 与 python 读写文件txt
C++ 读写文件ref文件读写步骤一般是,打开文件,操作文件,关闭文件,一定要记得关闭文件。头文件#include #include 类fstream包含三个类,分别是:ifstream—该数据类型表示输入文件流,用于从文件读取信息。ofstream—该数据类型表示输出文件流,用于创建文件并向文件写入信息。fstream—该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。文件指针位置ios:
2021-02-23 20:40:59
496
原创 Ubuntu 常见问题,设置环境变量
Ubuntu 设置环境变量ref临时设置export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH当前用户的全局设置打开~/.bashrc,添加行:export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH使生效:source .bashrc所有用户的全局设置vim /etc/profile # 打开文件在里面加入:export PATH=/home/yan/share
2021-02-23 19:46:41
247
原创 detectron2代码阅读助手
pandas_refDetectron2源码阅读笔记-(一)Config&TrainerDetectron2源码阅读笔记-(二)Registry&build_*方法Detectron2源码阅读笔记-(三)Dataset pipeline
2021-02-19 21:37:11
498
原创 python __call__(),__get__, __getattr__, __getattribute__等
Python call()方法refclass CLanguage: # 定义__call__方法 def __call__(self,name,add): print("调用__call__()方法",name,add)clangs = CLanguage()clangs("C语言中文网","http://c.biancheng.net")clangs.__call__("C语言中文网","http://c.biancheng.net") # 同上一行## 输出
2021-02-19 21:30:08
454
1
原创 python 基础之常用函数eval(),filter(),extend()等
get, getattr, __getattribute__的区别refobj.getattribute(self, name)在实例访问属性的时候无条件被调用。如果class中定义了__getattr__(),getattr()也不会被调用,除非显示的调用或者没有访问到属性引发AttributeError异常obj.getattr(self, name)当一般位置找不到属性时,会调用__getattr__()返回一个值,如果不存在__getattr__()方法则会引发AttributeError
2021-02-04 22:19:42
249
原创 python 类的继承与特殊方法
继承refref继承可以重用已经存在的数据和行为,减少代码的重复编写,子类继承了父类的所有公有属性和方法。继承,实现了代码重用子类拥有父类的所有属性和方法,如果子类想重写父类的方法,可以直接重写。支持多重继承,当父类中出现多个自定义的__init__的方法时,多重继承,只执行第一个累的__init_方法,其他不执行。如果想调用父类的 heshui 这个方法,可以用 super()class Animal: def heshui(self): print('动物正在喝水'
2021-02-04 21:47:09
221
原创 python dict与list遍历
python dict 遍历ref遍历key值a = {'a': '1', 'b': '2', 'c': '3'}for key in a: print(key+':'+a[key])for key in a.keys(): print(key+':'+a[key])遍历value值for value in a.values(): print(value)遍历字典项for kv in a.items(): print(kv)# ('a', '1')#
2021-02-04 21:04:02
261
原创 python json与pickle
用于序列化的两个模块:json: 用于字符串和python数据类型间进行转换pickle: 用于python特有的类型和python的数据类型间进行转换区别:Json模块提供了四个功能:dumps、dump、loads、loadpickle模块提供了四个功能:dumps、dump、loads、loadjson是可以在不同语言之间交换数据的,而pickle只在python之间使用。json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期
2021-02-04 20:52:59
244
1
原创 python 多线程
python 多线程菜鸟教程docs_threadimport _thread#_thread.start_new_thread ( function, args[, kwargs] )import _threadimport time# 为线程定义一个函数def print_time( threadName, delay): count = 0 while count < 5: time.sleep(delay) count += 1
2021-02-04 20:10:18
153
1
原创 grpc在python中的使用
Condacondaconda config --get channels # 查看已经添加的channelsconda config --set show_channel_urls yes # 显示安装的频道vim ~/.condarc # 已添加的channel查看conda install gatk创建软链接ln -s ourece dist
2021-02-03 17:00:46
951
2
原创 python yield
python yieldrefref可迭代对象当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象。所有你可以使用 for … in … 语法的叫做一个迭代器:列表,字符串,文件,但它们把所有的值都存储到了内存中。mylist = [x*x for x in range(3)]for i in mylist : print(i)生成器生成器是可以迭代的,但是只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据mygenerator = (x*x fo
2021-02-02 21:51:21
176
1
原创 Pyside2之QTimer
QTimerQTimer类提供了重复和单次的定时器,要使用定时器,需要先创建一个QTimer实例,将其Timeout信号连接到槽函数,并调用start(),然后,定时器,会以恒定的间隔发出timeout信号当窗口的控件收到Timeout信号后,他就会停止这个定时器。QTimer常常用于更新QLabel图像等。start(milliseconds) 启动或重新启动定时器,时间间隔为毫秒,如果定时器已经运行,他将停止并重新启动,如果singleSlot信号为真,定时器仅被激活一次Stop() 停止定时器
2021-01-22 20:27:35
3009
原创 git 基本操作
git基本操作基础使用git add .git add aa.pygit commit -m “tijiao zhushi”git pull --rebasegit push–rebasereferencegit stash和git stash popreferencegit stash备份当前工作区的内容,保存到git 栈中,从最近的一次commit中读取相关内容git stash pop从git栈中获取到最近一次stash进去的内容,恢复工作区的内容。。获取之后,会删除栈中对
2021-01-19 20:37:35
194
原创 Python 数组基础操作
Numpy基础操作list[]a=[1]*n # 生成相同元素的数组list.append('Google') ## 使用 append() 添加元素del list1[2] # 删除元素len([1, 2, 3]) # 3 长度[1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6] 组合3 in [1, 2, 3] # True 元素是否存在于列表中for x in [1, 2, 3]: print x, # 1 2 3 迭代cmp(list1,
2021-01-19 19:54:03
1550
原创 OpenCV图像操作
OpenCV图像操作OpenCVMat数据类型Mat基础操作图像遍历基本遍历指针遍历forEach访问图像像素点像素范围处理空图像创建图像缩放寻找图像像素最大值与最小值计算图像的均值和标准方差convertTo函数cvtColor()函数窗口相关利用鼠标点击显示像素值或者三维坐标图像与绘制轮廓近似取多边形边缘点重要数学操作掩膜操作膨胀、腐蚀、开操作、闭操作Sobel算子OpenCVOpenCV官方网址.非常推荐查看官方文档Mat数据类型Mat基础操作图像遍历基本遍历for (int m =
2020-12-20 16:33:34
484
原创 重学数据结构(二)--线性表
链表:快慢指针例子:栈:(后进先出)栈顶(top)栈底(bottom)压栈(push)出栈(pop)顺序栈、链栈括号匹配队列:
2020-06-21 17:48:41
135
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅