Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
优化Python中稀疏向量对欧氏距离计算的性能_创想鸟

优化Python中稀疏向量对欧氏距离计算的性能

优化Python中稀疏向量对欧氏距离计算的性能

本文探讨了在Python中高效计算两组向量间稀疏欧氏距离的策略。针对传统方法中计算大量不必要距离的性能瓶颈,我们提出并实现了一种结合Numba加速和SciPy稀疏矩阵(CSR格式)的解决方案。该方法通过显式循环和条件判断,仅计算所需距离,并直接构建稀疏矩阵,显著提升了计算速度和内存效率,特别适用于大规模、高稀疏度的场景。

问题背景与传统方法的局限性

在许多数据分析和机器学习任务中,我们可能需要计算两组向量集合a和b之间的所有或部分欧氏距离。当需要计算的距离对数量远小于总的可能距离对数量时(即距离矩阵是稀疏的),传统的计算方法效率低下。

考虑以下场景:给定两个向量集合 A (形状为 (N, D)) 和 B (形状为 (M, D)),以及一个布尔掩码 M (形状为 (N, M)),其中 M[i, j] 为 True 表示需要计算 A[i] 和 B[j] 之间的距离。

一种常见的初始实现方式是计算所有 N * M 对距离,然后通过掩码 M 筛选出所需的部分:

import numpy as npA = np.array([[1, 2], [2, 3], [3, 4]])                              # (3, 2)B = np.array([[4, 5], [5, 6], [6, 7], [7, 8], [8, 9]])              # (5, 2)M = np.array([[0, 0, 0, 1, 0], [1, 1, 0, 0, 0], [0, 0, 0, 0, 1]])   # (3, 5)# 计算所有差值矩阵diff = A[:,None] - B[None,:]                                        # (3, 5, 2)# 计算所有欧氏距离distances = np.linalg.norm(diff, ord=2, axis=2)                     # (3, 5)# 应用掩码,将不需要的距离置零masked_distances = distances * M                                    # (3, 5)print("原始方法计算的距离矩阵:n", masked_distances)

这种方法的问题在于,即使 M 中绝大多数元素为 False (即稀疏度很高),它仍然计算了所有 N * M 对距离,导致大量的冗余计算和内存消耗,尤其当 N 和 M 达到数千甚至更高时,性能瓶颈将非常明显。尝试使用 np.vectorize 或稀疏数组处理高维 diff 矩阵也往往无法有效解决性能问题。

基于Numba和CSR稀疏矩阵的高效解决方案

为了解决上述性能问题,我们可以采用一种结合Numba即时编译和SciPy稀疏矩阵(特别是CSR格式)的方法。核心思想是:

立即学习“Python免费学习笔记(深入)”;

避免不必要的计算: 仅在掩码 M 对应位置为 True 时才计算欧氏距离。高效存储: 直接将计算出的非零距离构建成稀疏矩阵,避免存储大量的零值。性能优化: 利用Numba加速Python循环,使其性能接近C语言。

1. 导入所需库

import numba as nbimport numpy as npimport scipy.sparseimport math

2. Numba加速的欧氏距离函数

np.linalg.norm 在循环内部调用时会有一定的开销。为了最大限度地提高性能,我们可以编写一个Numba加速的自定义欧氏距离函数。

@nb.njit()def euclidean_distance(vec_a, vec_b):    """    计算两个向量之间的欧氏距离。    使用Numba进行JIT编译以提高性能。    """    acc = 0.0    for i in range(vec_a.shape[0]):        acc += (vec_a[i] - vec_b[i]) ** 2    return math.sqrt(acc)

这个函数使用一个简单的循环计算平方差之和,然后取平方根,其结果与 np.linalg.norm(vec_a – vec_b) 相同,但在Numba的优化下,执行速度更快。

3. 核心计算与CSR矩阵构建逻辑

构建CSR(Compressed Sparse Row)矩阵需要三个核心数组:

data:存储非零元素的值。indices:存储每个非零元素所在的列索引。indptr:存储每行非零元素在 data 和 indices 数组中的起始位置。

以下Numba加速的函数负责遍历掩码,计算所需距离,并填充这些CSR数组。

@nb.njit()def masked_distance_inner(data, indices, indptr, matrix_a, matrix_b, mask):    """    Numba加速的核心函数,根据掩码计算距离并填充CSR矩阵的data、indices、indptr数组。    """    write_pos = 0  # 当前写入data和indices数组的位置    N, M = matrix_a.shape[0], matrix_b.shape[0]    for i in range(N):        for j in range(M):            if mask[i, j]:                # 如果掩码为True,则计算距离并记录                data[write_pos] = euclidean_distance(matrix_a[i], matrix_b[j])                indices[write_pos] = j  # 记录列索引                write_pos += 1        # 每行结束后,记录该行在data和indices数组中的结束位置(即下一行的起始位置)        indptr[i + 1] = write_pos    # 确保所有预分配的内存都被使用    assert write_pos == data.shape[0]    assert write_pos == indices.shape[0]    # data、indices、indptr数组通过参数修改,无需返回

这个函数是性能关键部分,它通过两个嵌套循环遍历所有可能的 (i, j) 对。只有当 mask[i, j] 为 True 时,才会调用 euclidean_distance 计算距离,并将结果存储到 data 数组中,同时记录其对应的列索引到 indices 数组。indptr 数组则负责标记每行非零元素的起始和结束位置,这是CSR格式的关键。

4. 封装函数:设置与CSR矩阵生成

为了方便使用,我们创建一个封装函数 masked_distance,它负责准备数据结构、调用Numba核心函数,并最终返回一个 scipy.sparse.csr_matrix 对象。

def masked_distance(matrix_a, matrix_b, mask):    """    计算两组向量间由掩码指定的稀疏欧氏距离,并返回一个CSR稀疏矩阵。    """    N, M = matrix_a.shape[0], matrix_b.shape[0]    assert mask.shape == (N, M), "掩码形状必须与A和B的行数匹配。"    # 将掩码转换为布尔类型,确保正确计数    mask = mask != 0    # 确定稀疏矩阵中非零元素的总数,用于预分配内存    sparse_length = mask.sum()    # 预分配CSR矩阵所需的数组。无需初始化,Numba函数会直接写入。    data = np.empty(sparse_length, dtype='float64')    # 存储距离值    indices = np.empty(sparse_length, dtype='int64')   # 存储列索引    indptr = np.zeros(N + 1, dtype='int64')             # 存储每行的起始索引    # 调用Numba加速的核心函数进行计算和填充    masked_distance_inner(data, indices, indptr, matrix_a, matrix_b, mask)    # 使用填充好的数组构建scipy.sparse.csr_matrix    return scipy.sparse.csr_matrix((data, indices, indptr), shape=(N, M))

这个封装函数首先进行输入校验,然后计算稀疏矩阵中非零元素的总数 sparse_length。这是非常关键的一步,因为它允许我们精确地预分配 data 和 indices 数组的内存,避免了动态调整大小的开销。indptr 数组则需要预先用零初始化,并在 masked_distance_inner 中逐步填充。

示例与性能分析

为了演示和验证性能,我们创建大型随机数据集:

# 创建大型随机数据集进行测试A_big = np.random.rand(2000, 10)  # 2000个10维向量B_big = np.random.rand(4000, 10)  # 4000个10维向量# 创建一个非常稀疏的掩码(0.1%的元素为True)M_big = np.random.rand(A_big.shape[0], B_big.shape[0]) < 0.001# 运行基准测试# %timeit masked_distance(A_big, B_big, M_big)

在实际测试中,对于 A_big (2000, 10) 和 B_big (4000, 10),M_big 稀疏度为0.1%的场景,这种方法比原始的“计算所有再掩码”的方法快了约40倍。当向量维度更高(例如1000维)时,加速比甚至可以达到1000倍。

原始方法(计算所有距离再掩码)的性能示例:556 ms ± 3.74 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Numba加速和CSR构建方法的性能示例:13.5 ms ± 66.6 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)

这种显著的性能提升主要归因于:

避免冗余计算: 仅计算掩码指定的距离,大大减少了浮点运算量。Numba加速: 将Python循环转换为高效的机器码,消除了Python解释器的开销。内存效率: CSR矩阵只存储非零元素及其位置信息,节省了大量内存。

注意事项与优化建议

Numba的JIT编译: euclidean_distance 和 masked_distance_inner 函数上的 @nb.njit() 装饰器是性能提升的关键。它指示Numba在函数首次调用时将其编译为优化的机器码。自定义欧氏距离: 实践证明,在Numba环境中,自定义的循环计算欧氏距离通常比调用 np.linalg.norm 更快,因为它避免了函数调用的开销和NumPy通用函数的额外检查。数据类型优化:距离值 (data): 如果对精度要求不高,可以将 float64 替换为 float32,这可以减少内存占用并可能略微提高计算速度。索引 (indices, indptr): 如果矩阵的维度(行数或列数)以及非零元素的总数小于 231,可以将 int64 替换为 int32,进一步节省内存。稀疏度影响: 这种方法的性能优势随着掩码稀疏度的增加而更加明显。如果掩码非常稠密(即需要计算大部分距离),那么原始的NumPy向量化方法可能仍然具有竞争力,因为Numba循环的固定开销可能会抵消部分优势。正确性验证: 在实际应用中,务必使用 np.allclose() 等方法验证新算法的计算结果与原始正确结果的一致性。

总结

通过结合Numba的即时编译能力和SciPy的CSR稀疏矩阵结构,我们提供了一种在Python中高效计算稀疏欧氏距离的专业教程方案。该方法通过有条件地计算距离并直接构建稀疏数据结构,有效解决了传统方法中存在的性能瓶颈和内存浪费问题。尤其在处理大规模、高稀疏度的向量集合时,这种优化策略能够带来显著的性能提升,是处理此类问题的理想选择。

以上就是优化Python中稀疏向量对欧氏距离计算的性能的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1374654.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Kivy项目APK导出错误:pyjnius编译失败问题解析与解决方案
上一篇 2025年12月14日 14:20:09
使用 SQLAlchemy 进行多列查询时保持对象定义
下一篇 2025年12月14日 14:20:23

相关推荐

  • 主板 M.2 接口的散热设计是否必要?

    主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?主板 M.2 接口的散热设计是否必要?

    对于高性能NVMe SSD,M.2接口散热设计十分必要。其能有效防止高负载下的热节流现象,保障持续性能输出并延长硬盘寿命。尤其在使用PCIe Gen4及以上规格SSD进行大文件传输、游戏或专业工作时,主板自带或额外加装的散热片可显著降低温度。中低端主板附带的简易散热片效果有限,仅适合轻度使用;而中高…

    2026年9月25日 • 用户投稿
    000
  • mysql如何读取数据库数据

    mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据mysql如何读取数据库数据

    MySQL 读取数据库数据有两种常用方法:SELECT 语句,用于从表中提取数据,语法为:SELECT [列名] FROM [表名] [条件] [分组] [条件] [排序] [限制]。fetchall() 方法,用于将所有结果行存储在一个元组列表中。 MySQL 读取数据库数据 MySQL 提供了多…

    2026年9月25日 • 用户投稿
    000
  • DeepSeek如何配置自动扩缩容 DeepSeek弹性计算资源管理

    DeepSeek如何配置自动扩缩容 DeepSeek弹性计算资源管理DeepSeek如何配置自动扩缩容 DeepSeek弹性计算资源管理DeepSeek如何配置自动扩缩容 DeepSeek弹性计算资源管理DeepSeek如何配置自动扩缩容 DeepSeek弹性计算资源管理

    要实现deepseek的自动扩缩容,核心在于根据负载动态调整资源。1. 首先确定监控指标,如gpu利用率、请求延迟、并发数等,优先关注服务压力关键指标;2. 设置扩缩策略,基于规则适用于周期性负载,基于预测适合波动无规律场景;3. 选择资源类型,spot实例适合容忍中断任务,按量付费适合高可用服务,…

    2026年9月25日 • 用户投稿
    000
  • sublime怎么快速切换文件语法类型_sublime修改文件语言类型的方法

    sublime怎么快速切换文件语法类型_sublime修改文件语言类型的方法sublime怎么快速切换文件语法类型_sublime修改文件语言类型的方法sublime怎么快速切换文件语法类型_sublime修改文件语言类型的方法sublime怎么快速切换文件语法类型_sublime修改文件语言类型的方法

    点击状态栏语言名可快速切换语法类型,立即应用高亮规则;2. 用Ctrl+Shift+P或Cmd+Shift+P打开命令面板,输入Set Syntax选择目标语言;3. 通过“Open all with current extension as…”设置默认语法关联,或手动编辑配置文件,使特…

    2026年9月25日 • 用户投稿
    200
  • 鸿蒙系统和安卓系统哪个更流畅

    鸿蒙系统和安卓系统哪个更流畅鸿蒙系统和安卓系统哪个更流畅鸿蒙系统和安卓系统哪个更流畅鸿蒙系统和安卓系统哪个更流畅

    总体而言,鸿蒙系统在流畅性上优于安卓系统。其优势在于:微内核架构提高响应速度;分布式技术实现跨设备协作;方舟编译器优化应用性能;实时调度优先处理重要任务。不过,安卓系统拥有更丰富的应用程序生态,满足用户多样化需求。 鸿蒙系统与安卓系统:流畅性对比 直接回答: 总体而言,鸿蒙系统在流畅性上优于安卓系统…

    2026年9月25日 • 用户投稿
    000
  • sublime怎么快速查看函数或类列表_sublime结构导航与符号浏览技巧

    sublime怎么快速查看函数或类列表_sublime结构导航与符号浏览技巧sublime怎么快速查看函数或类列表_sublime结构导航与符号浏览技巧sublime怎么快速查看函数或类列表_sublime结构导航与符号浏览技巧sublime怎么快速查看函数或类列表_sublime结构导航与符号浏览技巧

    使用Ctrl+R或Cmd+R打开“前往符号”面板,可快速定位函数和类;通过安装SideBarEnhancements等插件,在侧边栏查看文件符号树;配合LSP插件支持,使用F12实现“转到定义”跨文件跳转;自定义快捷键如Ctrl+Shift+R优化操作效率。 在使用 Sublime Text 编辑代…

    2026年9月25日 • 用户投稿
    300
  • 一帧能玩 三帧电竞! 博主测试各主流显卡运行《战地6》帧数

    一帧能玩 三帧电竞! 博主测试各主流显卡运行《战地6》帧数一帧能玩 三帧电竞! 博主测试各主流显卡运行《战地6》帧数一帧能玩 三帧电竞! 博主测试各主流显卡运行《战地6》帧数一帧能玩 三帧电竞! 博主测试各主流显卡运行《战地6》帧数

    近日,YouTube频道54 FPS对《战地风云6》在多款主流显卡上的运行表现进行了实测。测试平台搭载了AMD Ryzen 5 7600处理器与32GB内存,确保CPU不会成为性能瓶颈。 测试数据如下: GTX 1650(1080p,低画质)— 平均43帧;GTX 1650(1080p,低画质 + …

    2026年9月25日 • 用户投稿
    100
  • mysql怎么创建新连接

    mysql怎么创建新连接mysql怎么创建新连接mysql怎么创建新连接mysql怎么创建新连接

    要创建新的 MySQL 连接,需要导入 MySQL Connector,然后依次创建连接对象、验证连接、创建游标对象、执行查询、检索结果,最后关闭连接。 如何创建新的 MySQL 连接 若要创建新的 MySQL 连接,可以使用以下步骤: 1. 导入 MySQL Connector 导入 MySQL …

    2026年9月25日 • 用户投稿
    000
  • Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧

    Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧Chrome浏览器怎么查看某个插件的资源占用_插件资源占用情况监控技巧

    首先使用Shift+Esc打开Chrome任务管理器,查看各扩展程序的CPU和内存占用情况,识别高耗能插件;接着通过chrome://extensions页面禁用或删除异常扩展;最后可启用chrome://flags中的悬停显示内存功能,便于实时监控标签页资源消耗。 如果您发现Chrome浏览器运行…

    2026年9月25日 • 用户投稿
    200
  • 为什么有些SSD参数漂亮但实际体验却令人失望?

    为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?为什么有些SSD参数漂亮但实际体验却令人失望?

    SSD实际体验不佳的核心在于纸面参数仅反映理想条件下的峰值性能,而真实使用中受主控、闪存类型、SLC缓存耗尽、DRAM缓存缺失、固件优化不足及散热不良等因素影响,导致持续写入速度骤降、系统卡顿等问题。 很多时候,我们看着SSD产品页面上那些漂亮的顺序读写速度,比如几千MB/s,或者惊人的IOPS,心…

    2026年9月24日 • 用户投稿
    100
  • mysql怎么使用数据库命令

    mysql怎么使用数据库命令mysql怎么使用数据库命令mysql怎么使用数据库命令mysql怎么使用数据库命令

    MySQL 命令包括:1. 数据操作语言(DML):SELECT、INSERT、UPDATE、DELETE;2. 数据定义语言(DDL):CREATE、ALTER、DROP;3. 数据控制语言(DCL):GRANT、REVOKE;4. 事务控制:BEGIN、COMMIT、ROLLBACK;5. 实用…

    2026年9月24日 • 用户投稿
    100
  • sublime怎么设置代码片段(snippet)的触发词 _sublime snippet触发词设置

    sublime怎么设置代码片段(snippet)的触发词 _sublime snippet触发词设置sublime怎么设置代码片段(snippet)的触发词 _sublime snippet触发词设置sublime怎么设置代码片段(snippet)的触发词 _sublime snippet触发词设置sublime怎么设置代码片段(snippet)的触发词 _sublime snippet触发词设置

    在Sublime Text中设置代码片段触发词需编辑tabTrigger标签,2. 创建新片段并配置content、tabTrigger、scope等字段,3. 将文件保存为Packages/User/下的.sublime-snippet格式,4. 在对应语言文件中输入触发词后按Tab键即可展开。 …

    2026年9月24日 • 用户投稿
    100
  • 公众号如何进行用户画像分析_公众号用户画像分析的实用技巧

    公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧公众号如何进行用户画像分析_公众号用户画像分析的实用技巧

    通过分析用户属性、互动行为、问卷反馈及第三方工具,可构建动态更新的公众号用户画像。首先利用后台数据掌握性别、年龄、地域等基础特征;再结合文章阅读、点赞、分享行为提炼兴趣标签;随后通过问卷收集职业、需求等主观信息,形成典型用户原型;接着运用RFM模型对用户分层,识别高价值群体;最后每月定期更新画像,确…

    2026年9月24日 • 用户投稿
    300
  • AI开发平台有哪些_好用的AI开发平台大全

    AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全AI开发平台有哪些_好用的AI开发平台大全

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Coze:提供大量AI智能体免费使用,已集成DeepSeek满血版 SiliconFlow:专注于生成式AI计算的基础设施平台 码上飞:支持免费生成小程序/APP/网页,通过一句话快速生成应用 …

    2026年9月24日 • 用户投稿
    200
  • sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法

    sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法sublime怎么配置LSP(Language Server Protocol)_sublime语言服务器协议配置方法

    首先安装LSP插件,再配置语言服务器;以Python为例,通过pip安装pylsp并在LSP设置中添加客户端配置,保存后打开.py文件即可启用服务。 在 Sublime Text 中配置 LSP(Language Server Protocol)可以大幅提升代码补全、跳转定义、悬停提示等开发体验。下…

    2026年9月24日 • 用户投稿
    100
  • 散热系统的设计如何影响高端硬件的长期稳定性?

    散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?散热系统的设计如何影响高端硬件的长期稳定性?

    散热系统设计直接决定高端硬件的长期稳定性,优良设计可有效控制温度、抑制热点、减少热应力损伤,从而延缓性能衰减、提升可靠性;反之则加速老化、引发故障。高性能计算因持续高负载对散热更敏感,要求温度稳定以保障运算精度与连续性。液体冷却凭借高效导热和低噪优势成为高端配置主流,但存在成本高、复杂性强及漏液风险…

    2026年9月24日 • 用户投稿
    1100
  • 怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法

    怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法怎么用豆包AI分析Python内存使用 AI辅助定位内存泄漏的实用方法

    python内存泄漏可通过tracemalloc、objgraph及代码分析定位。1. 使用tracemalloc模块记录内存分配堆栈,生成快照并输出统计结果,交由豆包ai分析可疑内存泄漏点;2. 用objgraph查看常见对象类型及增长趋势,若发现异常增长对象可交由豆包判断是否合理;3. 将疑似泄…

    2026年9月24日 • 用户投稿
    100
  • sublime如何格式化sql语句 _sublime SQL格式化方法

    sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法sublime如何格式化sql语句 _sublime SQL格式化方法

    使用插件实现Sublime Text格式化SQL。1. 安装Package Control:通过控制台执行代码安装插件管理工具;2. 安装SQLPrettyPrinter:通过命令面板搜索并安装,选中SQL语句后运行“SQL Pretty Print”命令格式化;3. 高级用户可结合Python的s…

    2026年9月24日 • 用户投稿
    100
  • mysql数据库中的自增列如何使用

    自增列是MySQL中用于自动产生唯一数值的整数列,通常作为主键使用。通过AUTO_INCREMENT属性,插入数据时若未指定值,系统会自动分配比当前最大值大1的数值,确保每条记录拥有唯一标识,简化插入操作。创建表时可定义自增列,如:CREATE TABLE users (id INT AUTO_IN…

    2026年9月24日
    100
  • sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法

    sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法sublime怎么把选中的代码片段发送到新的文件_sublime代码片段分离操作方法

    Sublime Text无一键发送代码到新文件功能,但可通过复制粘贴或拖拽方式快速实现:选中代码→复制→新建文件→粘贴并保存;或直接拖拽选中内容至标签栏创建新文件。 在 Sublime Text 中,目前没有直接的内置功能可以把选中的代码片段“一键发送”到一个新文件。但你可以通过几个简单的手动步骤快…

    2026年9月24日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信