当前位置: 首页 > article >正文

【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)

NumPy系列文章

  • 入门篇
  • 进阶篇
  • 终极篇

一、NumPy简介

NumPy(Numerical Python)是Python中科学计算的核心库,提供了高性能的多维数组对象和各种用于数组操作的函数。它是Python数据分析和科学计算的基础,被广泛应用于机器学习、数据科学、图像处理等领域。其核心优势在于多维数组(ndarray)的高效操作与向量化运算能力,与Python原生列表相比,ndarray的内存连续性、广播机制和底层C语言优化使其性能提升10-100倍。

1. NumPy核心功能

  1. 高性能多维数组(ndarray)
    NumPy的核心是ndarray对象,支持高维数据(如向量、矩阵、张量)的高效存储和操作。其内存连续性和C语言底层实现使运算速度远超Python原生列表,尤其适合大规模数据场景。例如,向量化操作无需显式循环即可完成数组间运算。

  2. 广播机制(Broadcasting)
    允许不同形状的数组进行运算,自动扩展维度以匹配计算需求,简化代码并减少内存消耗。例如,在不同形状的数组间进行加法运算时,NumPy会自动将较小的数组扩展为与较大数组形状一致。

  3. 丰富的数学函数库
    提供线性代数(矩阵乘法、求逆)、统计(均值、标准差)、傅里叶变换、随机数生成等函数,覆盖科学计算的全场景。例如:

  4. 内存效率与跨语言集成
    数据存储连续且类型一致,内存占用低,同时支持与C/C++/Fortran代码无缝集成,进一步提升计算性能。

2. NumPy在AI学习中的关键作用

  1. 数据处理与特征工程

    • 数据预处理:快速完成缺失值处理、标准化/归一化等操作,为模型输入提供结构化数据。
    • 特征构造:通过数组运算生成新特征(如多项式特征、交互项),提升模型表达能力。
  2. 算法实现与模型训练

    • 矩阵运算基础:机器学习算法(如线性回归、神经网络)依赖矩阵乘法、梯度计算等操作,NumPy的高效实现加速模型训练。
    • 自定义模型开发:可直接实现K-Means、PCA等算法原型,便于理解底层逻辑。
  3. 与其他库的协同

    • 生态系统基石:Pandas(数据处理)、SciPy(科学计算)、TensorFlow/PyTorch(深度学习)均基于NumPy设计,数据传递无缝衔接。
    • GPU加速过渡:NumPy语法与GPU计算库(如CuPy)兼容,便于迁移至高性能计算环境。

3. 优势总结

  1. 性能优势:C语言内核与向量化操作使计算速度提升10-100倍。
  2. 代码简洁性:避免显式循环,以声明式语法实现复杂运算。
  3. 广泛适用性:覆盖科学计算、图像处理、信号分析、金融建模等多领域。

二、NumPy安装指南

1. 安装方式

所有系统通用方法

# 使用pip安装(推荐)  
pip install numpy  # 使用conda安装(适合Anaconda用户)  
conda install numpy  

验证安装

import numpy as np  
print(np.__version__)  # 输出示例:1.24.3  

2. 注意事项

  • 版本兼容性:确保Python版本≥3.7(NumPy≥1.20要求)
  • 加速优化:安装Intel® MKL加速库可提升性能(conda install numpy mkl

三、NumPy基础用法

3.1 数组创建与属性

3.1.1 内容概述
  1. 数组创建

    • 从列表创建np.array([1, 2, 3])
    • 指定数据类型np.array([1, 2, 3], dtype=np.float32)
    • 从函数创建np.zeros((2, 3))np.ones((2, 3))np.random.rand(2, 3)np.arange(0, 10, 2)
    • 从文件读取np.loadtxt('data.txt')
    • 从内存读取np.frombuffer(buffer, dtype=np.float32)
  2. 数组属性

    • 形状(shape)arr.shape
    • 维度(ndim)arr.ndim
    • 元素总数(size)arr.size
    • 数据类型(dtype)arr.dtype
3.1.2 示例代码
def arr_create_attr():import numpy as np# 1.列表创建和常用属性# 从列表创建一维数组arr_1d = np.array([1, 2, 3])# 二维数组arr_2d = np.array([[1, 2, 3], [4, 5, 6]])# 查看数据或属性print('二维数组:', arr_2d)print(f"形状shape={arr_2d.shape}")        # (2, 3)print(f"维度ndim={arr_2d.ndim}")          # 2print(f"大小size={arr_2d.size}")          # 6print(f"类型dtype={arr_2d.dtype}")        # int32# 使用参数dtype显式指定浮点型arr_float = np.array([1, 2, 3], dtype=np.float32)# 强制转换类型(混合数据),使用参数dtype会做数据强制转换arr_mixed = np.array([1, "2", 3.0], dtype=np.int32)print('混合类型数组:', arr_mixed) # [1 2 3]# 2.从函数创建数组# 全零zeros数组,不支持指定值的全值初始化arr_zeros = np.zeros((2, 3))   # 2行3列print('全零数组:', arr_zeros)   # [[0. 0. 0.] [0. 0. 0.]]# 全一数组arr_ones = np.ones((2, 3))print('全一数组:', arr_ones)    # [[1. 1. 1.] [1. 1. 1.]]# 随机数组(取值0-1均匀分布)arr_rand = np.random.rand(2, 3) # 2行3列print('随机数组:', arr_rand)     # [[0.77112162 0.67775043 0.30103794] [0.04624229 0.92962109 0.8566133 ]]# 等差数列数组arr_arange = np.arange(1, 10, 3)print('等差数组:', arr_arange) # [1 4 7]# 等分数列数组,含端点arr_linspace = np.linspace(0, 4, 5)print('等分数组:', arr_linspace) # [0. 1. 2. 3. 4.]# 3.从文件操作# csv保存和读取file_vsv = './data.csv'dat = np.arange(0, 15).reshape(3, 5)np.savetxt(file_vsv, dat, delimiter=',')arr_csv = np.loadtxt(file_vsv, delimiter=',')print('csv数组:', arr_csv)# 二进制文件保存和读取file_dat = './data.npy'np.save(file_dat, dat)arr_npy = np.load(file_dat)print('二进制数组:', arr_npy)# 4.内存存取arr_buffer = np.ndarray.tobytes(dat)arr_buffer = np.frombuffer(arr_buffer, dtype=np.int32)print('缓存数组:', arr_buffer) # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
3.1.3 总结说明
  1. 灵活多样

    • NumPy支持从列表、函数生成、文件、内存等多种数据源创建数组。
  2. 性能优化

    • 使用zerosones等函数预分配内存,避免动态扩展开销。
  3. 类型控制

    • 通过dtype参数可精确控制数据类型,显式指定或强制转换,确保数据一致性,提升计算效率和内存利用率。
  4. 内存布局

    • 连续内存布局确保高效内存访问,减少内存碎片和缓存失效。

3.2 数组索引与切片

3.2.1 内容概述
  1. 一维数组索引

    • 整数索引arr[0]
    • 切片arr[1:4]
  2. 多维数组索引

    • 整数索引arr[0, 1]
    • 切片arr[:, 1:4]
3.2.2 示例代码
def arr_index_slice():import numpy as np# 一维数组索引及切片,类似python中的list操作# 创建一维数组arr1d = np.arange(0, 5) # [0 1 2 3 4]# 索引,支持正负数print(arr1d[0], arr1d[2], arr1d[-1], arr1d[4]) # 0 2 4# 切片,左闭右开print(arr1d[2:4])       # [2 3]print(arr1d[-5:3:2])    # [0 2]print(arr1d[:])         # [0 1 2 3 4]print(arr1d[-2:])       # [3 4]# 二维数组索引及切片# 创建二维数组arr2d = np.arange(0, 10).reshape(2, 5) # [[0 1 2 3 4] [5 6 7 8 9]]# 索引print(arr2d[0, 0], arr2d[1, 2], arr2d[-1, -1]) # 0 7 9# 切片,每个维度均可按一维去切片,然后再组合print(arr2d[:, 1:3])        # [[1 2] [6 7]]print(arr2d[1, 1:3])        # [6 7]print(arr2d[:-1, 1:3])      # [[1 2]]print(arr2d[:-1, 0:5:2])    # [[0 2 4]]# 高维数组和一维数组转换a = arr2d.flatten()                # 高维转一维b = np.arange(0, 6).reshape(2, 3)  # 一维转二维
3.2.3 总结说明
  1. 索引规则

    • 遵循左闭右开区间原则,如1:4包含索引1、2、3
    • 负数索引表示从末尾计数,-1为最后一个元素
  2. 多维切片语法

    • 用逗号分隔维度:arr[行操作, 列操作]
    • 冒号:表示全选维度,::步长控制采样间隔
  3. 视图与拷贝

    • 切片操作返回原数组视图,修改切片会影响原数组(内存共享)
    • 需显式调用.copy()创建独立副本:sub_arr = arr[1:4].copy()
  4. 性能优化

    • 避免循环操作,优先使用向量化切片(如arr[:,1:4]比逐行遍历快10倍以上)
    • 对大型数组进行连续切片时,推荐预先计算索引范围减少内存占用

3.3 数组运算

3.3.1 内容概述
  1. 算术运算

    • 加法np.add(arr1, arr2)
    • 乘法np.multiply(arr1, arr2)
    • 要点说明
      • 算术运算支持广播机制(不同形状数组自动对齐)
      • 逐元素运算与矩阵乘法区分:*是逐元素乘,np.dot()是矩阵乘
      • 支持原地运算:arr1 += 10 直接修改原数组,避免创建新对象
  2. 统计函数

    • 平均值np.mean(arr)
    • 标准差np.std(arr)
    • 要点说明
      • axis=0按列计算,axis=1按行计算
      • 结合keepdims=True保持维度:np.mean(scores, axis=1, keepdims=True)
      • 分位数计算:np.percentile(scores, 75)
  3. 线性代数

    • 矩阵乘法np.dot(arr1, arr2)
    • 要点说明
      • 矩阵乘法要求前列数=后行数
      • 高级运算包含:求逆(np.linalg.inv)、行列式(np.linalg.det)
      • 推荐使用@运算符简化矩阵乘法表达式
  4. 随机数生成

    • 均匀分布np.random.rand(2, 3)
    • 正态分布np.random.randn(2, 3)
    • 要点说明
      • rand()生成[0,1)均匀分布,randn()生成N(0,1)正态分布
      • 高级分布支持:np.random.betanp.random.poisson
      • 生产环境推荐使用np.random.Generator对象
3.3.2 示例代码
def arr_index_calc():import numpy as np# 1.算术运算# **要点说明**:# - 算术运算支持广播机制(不同形状数组自动对齐)# - 逐元素运算与矩阵乘法区分:`*`是逐元素乘,`np.dot()`是矩阵乘# - 支持原地运算:`arr1 += 10` 直接修改原数组# 创建示例数组arr1 = np.array([[1, 2], [3, 4]])arr2 = np.array([[5, 6], [7, 8]])# 逐元素加法add_result = np.add(arr1, arr2)  # 等价于 arr1 + arr2print("加法结果:\n", add_result)"""[[ 6  8][10 12]]"""# 逐元素乘法mul_result = np.multiply(arr1, arr2)  # 等价于 arr1 * arr2print("\n乘法结果:\n", mul_result)"""[[ 5 12][21 32]]"""# 2.统计函数# **要点说明**:# - `axis=0`按列计算,`axis=1`按行计算# - 结合`keepdims=True`保持维度:`np.mean(scores, axis=1, keepdims=True)`# - 分位数计算:`np.percentile(scores, 75)`# 创建学生成绩数据集scores = np.array([[85, 90, 78], [76, 88, 92], [90, 85, 80]])# 全局统计,效果类似于多维变一维print("全体平均值:", np.mean(scores))    # 84.88888888888889print("全体标准差:", np.std(scores))     # 5.4046162253401375# 轴向统计,指定维度方向print("\n各科平均分:", np.mean(scores, axis=0))  # [83.666 87.666 83.333]print("学生最高分:", np.max(scores, axis=1))  # [90 92 90]# 3.线性代数# **要点说明**:# - 矩阵乘法要求前列数=后行数# - 高级运算包含:求逆(`np.linalg.inv`)、行列式(`np.linalg.det`)# - 推荐使用`@`运算符简化矩阵乘法表达式# 矩阵乘法matrix_a = np.array([[1, 2], [3, 4]])matrix_b = np.array([[5, 6], [7, 8]])dot_product = np.dot(matrix_a, matrix_b)  # 等价于 matrix_a @ matrix_bprint("矩阵乘法结果:\n", dot_product)"""[[19 22][43 50]]"""# 解线性方程组(扩展)A = np.array([[3, 1], [1, 2]])b = np.array([9, 8])x = np.linalg.solve(A, b)  # [2., 3.]# 4.随机数生成# **要点说明**:# - `rand()`生成[0,1)均匀分布,`randn()`生成N(0,1)正态分布# - 高级分布支持:`np.random.beta`、`np.random.poisson`# - 生产环境推荐使用`np.random.Generator`对象# 设置随机种子保证可复现np.random.seed(42)# 均匀分布[0,1)uniform_data = np.random.rand(2, 3)print("均匀分布:\n", uniform_data)"""[[0.37454012 0.95071431 0.73199394][0.59865848 0.15601864 0.15599452]]"""# 标准正态分布normal_data = np.random.randn(2, 3)print("\n正态分布:\n", normal_data)"""[[ 1.57921282  0.76743473 -0.46947439][ 0.54256004 -0.46341769 -0.46572975]]"""# 指定范围随机整数rand_int = np.random.randint(1, 100, (3, 3))"""[[76 58 22][89 49 91][59 42 92]]"""
3.3.3 总结说明
  1. 向量化优势
    NumPy运算比Python循环快10-100倍,例如对百万级数组求平方耗时对比:

    # Python列表: ~100ms vs NumPy数组: ~1ms
    
  2. 广播机制
    允许不同形状数组运算,自动扩展维度:

    arr = np.array([[1,2],[3,4]])
    print(arr + 10)  # 所有元素+10
    
  3. 内存管理
    切片操作生成视图而非副本,修改切片会影响原数组:

    sub_arr = arr[0:2].copy()  # 显式创建副本
    
  4. 函数分类

    • 数学运算sin, exp, log
    • 统计函数sum, median, percentile
    • 线性代数svd, eig, qr分解
  5. 应用场景

    • 机器学习:数据标准化((x - mean)/std)
    • 科学计算:解微分方程、傅里叶变换
    • 图像处理:像素矩阵操作

3.4 数组重塑与转置

3.4.1 内容概述
  1. 重塑

    • 改变形状arr.reshape((2, 3))
    • 展平arr.flatten()
    • 说明
      • reshape 不改变原数组,返回新数组。
      • 新形状元素总数需与原数组一致,否则报错。
      • 可用 -1 自动计算维度(如 arr.reshape(3, -1))。
  2. 转置

    • 行转列arr.T
    • 说明
      • .T 属性是转置的高效实现,返回原数组的视图(共享内存)。
      • 其他转置方法:np.transpose(arr)np.swapaxes(arr, 0, 1)
      • 转置后修改视图会影响原数组(需注意内存共享特性)。
      • flatten() 返回原数组的副本,修改副本不影响原数组。
      • 若需返回视图(共享内存),可用 ravel()
  3. 高维转置

    • 指定轴顺序arr.transpose(1, 0)
    • 说明
      • 可同时转置多个维度,如 arr.transpose(2, 0, 1)
3.4.2 示例代码
def arr_reshape():import numpy as np# 1.数组重塑(Reshaping)# 原始数组(1x6)arr = np.arange(6)print("原始数组:", arr)  # [0 1 2 3 4 5]# 重塑为2x3矩阵,返回新数组reshaped = arr.reshape((2, 3))print("\n重塑后的2x3数组:\n", reshaped)"""[[0 1 2][3 4 5]]"""# 自动推断维度(-1占位符)auto_reshape = arr.reshape(3, -1)  # -1自动计算为2print("\n自动推断维度结果:\n", auto_reshape)"""[[0 1][2 3][4 5]]"""# 展平操作(两种方法)flattened = reshaped.flatten()  # 返回拷贝raveled = reshaped.ravel()      # 返回视图print("\n展平结果:", flattened)  # [0 1 2 3 4 5]# 2、数组转置(Transpose)# 创建3x2矩阵matrix = np.array([[1, 2], [3, 4], [5, 6]])# 转置方法1:T属性print("转置结果(T):\n", matrix.T)"""[[1 3 5][2 4 6]]"""# 转置方法2:transpose()函数print("\n转置结果(transpose):\n", matrix.transpose(1, 0))"""[[1 3 5][2 4 6]]"""# 高维转置(交换轴顺序)tensor = np.arange(24).reshape(2, 3, 4)print("\n三维张量转置维度:", tensor.transpose(2, 0, 1).shape)  # (4,2,3)
3.4.3 总结说明
  1. 重塑规则

    • 形状匹配:新形状元素总数必须与原数组一致。如(2,3)数组只能重塑为(3,2)(6,)等相同元素量的形状
    • 维度参数reshape()接受元组参数表示各维度大小,-1可自动计算维度(如reshape(3,-1)
    • 内存特性reshape()返回视图(共享内存),flatten()返回副本(独立内存)
  2. 转置方法

    • .T属性:最简转置方式,适用于任何维度数组(如三维数组会反转所有轴)
    • 轴交换transpose()方法可指定轴顺序(如transpose(1,0)等效.T)
    • 特殊转置swapaxes(0,1)可交换指定轴,适用于高维数组调整
  3. 操作特性

    • 视图机制reshape/T等操作不复制数据,修改视图会影响原数组
    • 展平选择:优先使用flatten()需要副本时,ravel()需要视图时
    • 维度保持:单行展平可用reshape(1,-1)保持二维特性

3.5 数组复制与视图

3.5.1 内容概述
  1. 复制

    • 深拷贝arr.copy()
  2. 视图

    • 浅拷贝arr_view = arr[:]
3.5.2 示例代码
def arr_copy_view():import numpy as np# 1.重塑(视图)arr = np.arange(6).reshape(2, 3)arr_reshaped = arr.reshape(3, 2)  # 视图操作arr_reshaped[0, 0] = 100print("原数组:\n", arr)  # 原数组被修改"""[[100   1   2][  3   4   5]]"""# 2.转置(视图)arr_transposed = arr.T  # 转置生成视图arr_transposed[0, 1] = 200print("原数组:\n", arr)  # 原数组再次被修改"""[[100   1   2][200   4   5]]"""# 3.深拷贝arr_copy = arr.copy()  # 深拷贝独立内存arr_copy[0, 0] = 300print("原数组未改变:\n", arr)  # 原数组不受影响"""[[100   1   2][200   4   5]]"""# 4.浅拷贝(视图)arr_view = arr[:]  # 切片生成视图arr_view[0, 0] = 400print("原数组被修改:\n", arr)  # 数据共享特性"""[[400   1   2][200   4   5]]"""
3.5.3 总结说明
  1. 索引规则

    • 遵循左闭右开区间原则,如1:4包含索引1、2、3
    • 负数索引表示从末尾计数,-1为最后一个元素
    • 视图通过base属性可溯源原始数组(如arr_view.base is arr返回True)
  2. 多维切片语法

    • 用逗号分隔维度:arr[行操作, 列操作]
    • 冒号:表示全选维度,::步长控制采样间隔
    • 混合使用整数索引与切片(如arr[0, ::2]选取首行偶数列)
    • 转置操作.Ttranspose()生成视图而非副本
  3. 内存特性

    • 视图共享内存,操作效率高但可能影响原数据
    • 深拷贝.copy()完全隔离内存,适合需要数据隔离的场景
    • reshape()在连续内存时生成视图,否则创建副本
  4. 性能优化

    • 大数据处理优先使用视图避免内存复制
    • 显式调用.copy()可在视图无法满足需求时强制创建独立副本

NumPy高级用法和性能优化(待续


四、NumPy知识点总结

  1. 核心价值

    • NumPy以ndarray为核心,实现高性能多维数组运算,速度比Python原生列表快10-100倍
    • 广播机制实现不同形状数组的智能运算,减少显式循环和内存复制
    • 提供线性代数、统计、随机数生成等完备数学函数库
  2. 核心能力

    • 数据处理:支持从列表/文件/内存快速构建数组,类型控制精准(dtype)
    • 运算体系:向量化运算+广播机制实现零循环代码,内置200+数学函数
    • 内存管理:视图机制(reshape/T)避免数据复制,copy()实现深度克隆
    • 维度操控:reshape/flatten/transpose满足任意维度变换需求
  3. 工程实践要点

    • 优先使用arr[::2]向量化索引替代for循环
    • 利用arr.reshape(3,-1)自动计算缺失维度
    • 通过arr.copy()隔离数据修改风险
    • 使用@运算符简化矩阵乘法代码

五、结语

NumPy作为Python科学计算的基石,其高效的多维数组操作和丰富的数学函数库,使其成为AI开发、数据分析、工程计算等领域的核心工具。通过掌握数组创建、向量化运算、广播机制等基础能力,开发者可大幅提升数据处理效率,为机器学习模型训练和算法实现奠定坚实基础。

下篇将介绍NumPy高级用法和性能优化,敬请期待!

相关文章:

【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、NumPy简介 NumPy(Numerical Python)是Python中科学计算的核心库,提供了高性能的多维数组对象和各种用于数组操作的函数。它是Python数据分析和科学计算的基础,被广泛应用于机器学习、数据…...

【数据结构】链表与顺序表的比较

链表和顺序表是两种常见的数据结构,各有优缺点,适用于不同的场景。 ### 顺序表(数组) 顺序表在内存中连续存储元素,支持随机访问。 **优点:** 1. **随机访问**:通过索引直接访问元素&#xf…...

【JavaScript—前端快速入门】JavaScript 基础语法

JavaScript 基础语法 1. 变量 创建变量(变量定义 / 变量声明 / 变量初始化),JS 声明变量有3种方式 2. 通过打印日志,查看变量类型 JavaScript 是一门动态弱类型语言,变量可以存放不同类型的值(动态) 接下来,我们通过使用 log 指令…...

deepseek助力运维和监控自动化

将DeepSeek与Agent、工作流及Agent编排技术结合,可实现IT运维与监控的智能化闭环管理。以下是具体应用框架和场景示例: 一、智能Agent体系设计 多模态感知Agent 日志解析Agent:基于DeepSeek的NLP能力,实时解析系统日志中的语义&a…...

日志分析集群安装部署(ELK) 保姆级教程

创建用户es不用root用户 创建的用户是elasticsearch密码:elasticsearch useradd elasticsearch && echo elasticsearch|passwd --stdin elasticsearch 1.优化最打进程数、最大文件打开数、优化虚拟内存 、elastic.co vim /etc/security/limit.conf * soft nofile 65…...

springboot在业务层校验对象/集合中字段是否符合要求

springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢?例如通过excel导入数据,将excel数据转为实体类集合后,校验集合中属性是否符合要求。 2.代码实现 定义…...

【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees 学习笔记

本文以 2-3-4 树为例详细讲解了 B 树的概念,逐步分析其操作,并用 Java 实现了标准的多阶 B 树。 1. 2-3 & 2-3-4 Trees 上一节课中讲到的二叉搜索树当数据是随机顺序插入的时候能够使得树变得比较茂密,如下图右侧所示,时间复…...

论文阅读笔记:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

论文阅读笔记:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition 1 背景2 创新点3 方法3.1 回顾softmax损失3.2 统一交叉熵损失3.3 人脸验证中的UCE损失3.4 进一步的优化3.4.1 边际UCE损失3.4.2 平衡BCE损失 4 实验4.1 消融实验4.2 和SOTA方法对比 论…...

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息

1.聊天框 首先我们完善前端的消息输入框 components下面新建MessageInput组件 import { useState,useRef } from "react" import {X,Image,Send} from "lucide-react"import { useChatStore } from "../store/useChatStore" import toast from…...

数据仓库的特点

数据仓库的主要特点可以概括为:面向主题、集成性、非易失性、时变性、高性能和可扩展性、支持复杂查询和分析、分层架构以及数据质量管理。 1. 面向主题(Subject-Oriented) 数据仓库是面向主题的,而不是面向事务的。这意味着数据…...

5分钟看懂Deepseek开源周之六:Deepseek-V3/R1推理系统设计----揭开深度求索模型系统设计和运营成本之谜

前言 众所周知,四大天王一般有五个人。所以开源周五连发有第六天也很正常。贴上了开源周活动的github主贴,大家可以不上推特就能了解详情。 deepseek-ai/open-infra-index: Production-tested AI infrastructure tools for efficient AGI development a…...

DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-GET、Worklist

DICOM服务说明 DICOM(Digital Imaging and Communications in Medicine)是一种用于处理、存储、打印和传输医学影像的标准。DICOM定义了多种服务类,其中C-STORE、C-FIND、C-MOVE和C-GET是与影像数据查询和检索相关的四个主要服务类&#xff…...

C++发展

目录 ​编辑C 的发展总结:​编辑 1. C 的早期发展(1979-1985) 2. C 标准化过程(1985-1998) 3. C 标准演化(2003-2011) 4. C11(2011年) 5. C14(2014年&a…...

vue3中 组合式~测试深入组件:事件 与 $emit()

一、语法(props) 第一步&#xff1a;在组件模板表达式中&#xff0c;可以直接用$emit()方法触发自定义事件&#xff0c; <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...

动态规划/贪心算法

一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术&#xff0c;尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题&#xff0c;并保存这些子问题的解以避免重复计算&#xff0c;从而提高效率。 动态规划的核心思想 最优子结…...

python全栈-Linux基础

python全栈-Linux基础 文章目录 Linux安装/配置网络配置配置Linux远程登录配置虚拟机内部ip配置真机的ip安装XShell和Xftp目录结构用户和用户组用户管理添加用户useradd查看用户id修改用户usermod (选项)(参数)用户密码设置passed (选项)(参数)删除用户userdel [选项] 用户名 用…...

基于https虚拟主机配置

一、https介绍 http 明文&#xff0c;80/tcp https 密文&#xff0c;443/tcp 二、安全性保障 1、数据安全性 数据加密 2、数据完整性 3、验证身份的真实性、有效性 三、数据安全性 手段&#xff1a;加密 发送方加密数据&#xff0c;接收方解密数据 对称加密算法 加密、解密数据…...

Kmeans算法来实现RFM指标计算步骤

K-Means&#xff08;K均值&#xff09;是一种经典的无监督聚类算法&#xff0c;主要用于将数据集划分为 KKK 个不同的簇&#xff08;Cluster&#xff09;。 它基于最小化簇内样本的平方误差&#xff0c;即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …...

LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)

【LetMeFly】1745.分割回文串 IV&#xff1a;动态规划&#xff08;用III或II能直接秒&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning-iv/ 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;…...

Vue2-3 优雅的在子组件修改父组件传递过来的v-model

在子组件修改父组件传递过来的v-model&#xff0c;这样会破坏单向数据流&#xff0c;造成屎山代码&#xff0c;为了避免这个问题&#xff0c;需要给一个中间层来相对舒服的使用v-model。方法就是用computed去拦截v-model,然后在computed 里面去触发 emit 事件来修改父组件传来的…...

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…...

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意&#xff1a;**需要先安装NodeJS&#xff0c;然后才能安装Vue-cli。 环境准备好了&#xff0c;接下来我们需要通过Vue-cli创建一个vue项目&#xff0c;然后再学习一下vue项目的目录结构。Vue-cli提供了…...

开放鸿蒙OpenHarmony 5.0.0 Release 兼容性测试实战经验分享

OpenHarmony 5.0版本的发布时间是2024年12月20日至21日。这个版本带来了许多新特性和改进。现在5.0出了两个release 版本&#xff0c;分别是5.0.0和5.0.1。 就在5.0版本发布不到2周的时间内&#xff0c;2025年01月01日起&#xff0c;不支持新产品基于老分支&#xff08;OpenHar…...

Chromium_src源码

Chromium_src源码 码云上有一个OpenHarmony-TPC/chromium_src项目&#xff0c;目前已经停止维护了&#xff0c;迁移到GitCode上了&#xff0c;源代码项目地址为&#xff1a;openharmony-tpc/chromium_chrome 特此记录一下老的项目的相关软件架构 Chromium 简介 软件架构 软…...

深度学习的正则化深入探讨

文章目录 一、说明二、学习目标三、什么是机器学习中的正则化四、了解过拟合和欠拟合五、代价函数的意义六、什么是偏差和方差&#xff1f;七、机器学习中的正则化&#xff1f; 一、说明 在训练机器学习模型时&#xff0c;模型很容易过拟合或欠拟合。为了避免这种情况&#xf…...

《OpenCV》——dlib(人脸应用实例)

文章目录 dlib库dlib库——人脸应用实例——表情识别dlib库——人脸应用实例——疲劳检测 dlib库 dlib库的基础用法介绍可以参考这篇文章&#xff1a;https://blog.csdn.net/lou0720/article/details/145968062?spm1011.2415.3001.5331&#xff0c;故此这篇文章只介绍dlib的人…...

tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)

项目目标 主要的目的是学习tauri。 流程 1、搭建项目 2、简单的在项目使用leaflet 3、打包 准备项目 环境准备 废话不多说&#xff0c;直接开始 需要有准备能运行Rust的环境和Node&#xff0c;对于Rust可以参考下面这位大佬的文章&#xff0c;Node不必细说。 Rust 和…...

本地部署阿里万象2.1文生视频模型(Wan2.1-T2V)完全指南

在生成式AI技术爆发式发展的今天,阿里云开源的万象2.1(Wan2.1)视频生成模型,为创作者提供了从文字/图像到高清视频的一站式解决方案。本文针对消费级显卡用户,以RTX 4060 Ti 16G为例,详解本地部署全流程与性能调优方案,涵盖环境配置、多模型选择策略、显存优化技巧及实战…...

# [Linux] [Anaconda]解决在 WSL Ubuntu 中安装 Anaconda 报错问题

在 Windows 10 中安装了 WSL&#xff08;Windows Subsystem for Linux&#xff09;并使用 Ubuntu 后&#xff0c;你可能会下载 Anaconda 的 Linux 版本进行安装。但在安装过程中&#xff0c;可能会遇到 tar (child): bzip2: Cannot exec: No such file or directory 这样的错误…...

ES怎么查询大于10000条数据

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默认情况下&#xff0c;查询结果的最大返回条数是10,000条。如果你需要查询超过10,000条数据&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用 scroll API scroll API 适用于需要处理大量数据的场景&…...