【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)
NumPy系列文章
- 入门篇
- 进阶篇
- 终极篇
一、NumPy简介
NumPy(Numerical Python)是Python中科学计算的核心库,提供了高性能的多维数组对象和各种用于数组操作的函数。它是Python数据分析和科学计算的基础,被广泛应用于机器学习、数据科学、图像处理等领域。其核心优势
在于多维数组(ndarray)的高效操作与向量化运算能力,与Python原生列表相比,ndarray的内存连续性、广播机制和底层C语言优化使其性能提升10-100倍。
1. NumPy核心功能
-
高性能多维数组(ndarray)
NumPy的核心是ndarray
对象,支持高维数据(如向量、矩阵、张量)的高效存储和操作。其内存连续性和C语言底层实现使运算速度远超Python原生列表,尤其适合大规模数据场景。例如,向量化操作无需显式循环即可完成数组间运算。 -
广播机制(Broadcasting)
允许不同形状的数组进行运算,自动扩展维度以匹配计算需求,简化代码并减少内存消耗。例如,在不同形状的数组间进行加法运算时,NumPy会自动将较小的数组扩展为与较大数组形状一致。 -
丰富的数学函数库
提供线性代数(矩阵乘法、求逆)、统计(均值、标准差)、傅里叶变换、随机数生成等函数,覆盖科学计算的全场景。例如: -
内存效率与跨语言集成
数据存储连续且类型一致,内存占用低,同时支持与C/C++/Fortran代码无缝集成,进一步提升计算性能。
2. NumPy在AI学习中的关键作用
-
数据处理与特征工程
- 数据预处理:快速完成缺失值处理、标准化/归一化等操作,为模型输入提供结构化数据。
- 特征构造:通过数组运算生成新特征(如多项式特征、交互项),提升模型表达能力。
-
算法实现与模型训练
- 矩阵运算基础:机器学习算法(如线性回归、神经网络)依赖矩阵乘法、梯度计算等操作,NumPy的高效实现加速模型训练。
- 自定义模型开发:可直接实现K-Means、PCA等算法原型,便于理解底层逻辑。
-
与其他库的协同
- 生态系统基石:Pandas(数据处理)、SciPy(科学计算)、TensorFlow/PyTorch(深度学习)均基于NumPy设计,数据传递无缝衔接。
- GPU加速过渡:NumPy语法与GPU计算库(如CuPy)兼容,便于迁移至高性能计算环境。
3. 优势总结
- 性能优势:C语言内核与向量化操作使计算速度提升10-100倍。
- 代码简洁性:避免显式循环,以声明式语法实现复杂运算。
- 广泛适用性:覆盖科学计算、图像处理、信号分析、金融建模等多领域。
二、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 内容概述
-
数组创建
- 从列表创建:
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)
- 从列表创建:
-
数组属性
- 形状(shape):
arr.shape
- 维度(ndim):
arr.ndim
- 元素总数(size):
arr.size
- 数据类型(dtype):
arr.dtype
- 形状(shape):
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 总结说明
-
灵活多样
- NumPy支持从列表、函数生成、文件、内存等多种数据源创建数组。
-
性能优化
- 使用
zeros
、ones
等函数预分配内存,避免动态扩展开销。
- 使用
-
类型控制
- 通过
dtype
参数可精确控制数据类型,显式指定或强制转换,确保数据一致性,提升计算效率和内存利用率。
- 通过
-
内存布局
- 连续内存布局确保高效内存访问,减少内存碎片和缓存失效。
3.2 数组索引与切片
3.2.1 内容概述
-
一维数组索引
- 整数索引:
arr[0]
- 切片:
arr[1:4]
- 整数索引:
-
多维数组索引
- 整数索引:
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:4
包含索引1、2、3 - 负数索引表示从末尾计数,
-1
为最后一个元素
- 遵循左闭右开区间原则,如
-
多维切片语法
- 用逗号分隔维度:
arr[行操作, 列操作]
- 冒号
:
表示全选维度,::步长
控制采样间隔
- 用逗号分隔维度:
-
视图与拷贝
- 切片操作返回原数组视图,修改切片会影响原数组(内存共享)
- 需显式调用
.copy()
创建独立副本:sub_arr = arr[1:4].copy()
-
性能优化
- 避免循环操作,优先使用向量化切片(如
arr[:,1:4]
比逐行遍历快10倍以上) - 对大型数组进行连续切片时,推荐预先计算索引范围减少内存占用
- 避免循环操作,优先使用向量化切片(如
3.3 数组运算
3.3.1 内容概述
-
算术运算
- 加法:
np.add(arr1, arr2)
- 乘法:
np.multiply(arr1, arr2)
- 要点说明:
- 算术运算支持广播机制(不同形状数组自动对齐)
- 逐元素运算与矩阵乘法区分:
*
是逐元素乘,np.dot()
是矩阵乘 - 支持原地运算:
arr1 += 10
直接修改原数组,避免创建新对象
- 加法:
-
统计函数
- 平均值:
np.mean(arr)
- 标准差:
np.std(arr)
- 要点说明:
axis=0
按列计算,axis=1
按行计算- 结合
keepdims=True
保持维度:np.mean(scores, axis=1, keepdims=True)
- 分位数计算:
np.percentile(scores, 75)
- 平均值:
-
线性代数
- 矩阵乘法:
np.dot(arr1, arr2)
- 要点说明:
- 矩阵乘法要求前列数=后行数
- 高级运算包含:求逆(
np.linalg.inv
)、行列式(np.linalg.det
) - 推荐使用
@
运算符简化矩阵乘法表达式
- 矩阵乘法:
-
随机数生成
- 均匀分布:
np.random.rand(2, 3)
- 正态分布:
np.random.randn(2, 3)
- 要点说明:
rand()
生成[0,1)均匀分布,randn()
生成N(0,1)正态分布- 高级分布支持:
np.random.beta
、np.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 总结说明
-
向量化优势
NumPy运算比Python循环快10-100倍,例如对百万级数组求平方耗时对比:# Python列表: ~100ms vs NumPy数组: ~1ms
-
广播机制
允许不同形状数组运算,自动扩展维度:arr = np.array([[1,2],[3,4]]) print(arr + 10) # 所有元素+10
-
内存管理
切片操作生成视图而非副本,修改切片会影响原数组:sub_arr = arr[0:2].copy() # 显式创建副本
-
函数分类
- 数学运算:
sin
,exp
,log
等 - 统计函数:
sum
,median
,percentile
- 线性代数:
svd
,eig
,qr分解
- 数学运算:
-
应用场景
- 机器学习:数据标准化(
(x - mean)/std
) - 科学计算:解微分方程、傅里叶变换
- 图像处理:像素矩阵操作
- 机器学习:数据标准化(
3.4 数组重塑与转置
3.4.1 内容概述
-
重塑
- 改变形状:
arr.reshape((2, 3))
- 展平:
arr.flatten()
- 说明:
reshape
不改变原数组,返回新数组。- 新形状元素总数需与原数组一致,否则报错。
- 可用
-1
自动计算维度(如arr.reshape(3, -1)
)。
- 改变形状:
-
转置
- 行转列:
arr.T
- 说明:
.T
属性是转置的高效实现,返回原数组的视图(共享内存)。- 其他转置方法:
np.transpose(arr)
或np.swapaxes(arr, 0, 1)
。 - 转置后修改视图会影响原数组(需注意内存共享特性)。
flatten()
返回原数组的副本,修改副本不影响原数组。- 若需返回视图(共享内存),可用
ravel()
。
- 行转列:
-
高维转置
- 指定轴顺序:
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 总结说明
-
重塑规则
- 形状匹配:新形状元素总数必须与原数组一致。如
(2,3)
数组只能重塑为(3,2)
、(6,)
等相同元素量的形状 - 维度参数:
reshape()
接受元组参数表示各维度大小,-1
可自动计算维度(如reshape(3,-1)
) - 内存特性:
reshape()
返回视图(共享内存),flatten()
返回副本(独立内存)
- 形状匹配:新形状元素总数必须与原数组一致。如
-
转置方法
- .T属性:最简转置方式,适用于任何维度数组(如三维数组会反转所有轴)
- 轴交换:
transpose()
方法可指定轴顺序(如transpose(1,0)
等效.T) - 特殊转置:
swapaxes(0,1)
可交换指定轴,适用于高维数组调整
-
操作特性
- 视图机制:
reshape
/T
等操作不复制数据,修改视图会影响原数组 - 展平选择:优先使用
flatten()
需要副本时,ravel()
需要视图时 - 维度保持:单行展平可用
reshape(1,-1)
保持二维特性
- 视图机制:
3.5 数组复制与视图
3.5.1 内容概述
-
复制
- 深拷贝:
arr.copy()
- 深拷贝:
-
视图
- 浅拷贝:
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:4
包含索引1、2、3 - 负数索引表示从末尾计数,
-1
为最后一个元素 - 视图通过
base
属性可溯源原始数组(如arr_view.base is arr
返回True)
- 遵循左闭右开区间原则,如
-
多维切片语法
- 用逗号分隔维度:
arr[行操作, 列操作]
- 冒号
:
表示全选维度,::步长
控制采样间隔 - 混合使用整数索引与切片(如
arr[0, ::2]
选取首行偶数列) - 转置操作
.T
或transpose()
生成视图而非副本
- 用逗号分隔维度:
-
内存特性
- 视图共享内存,操作效率高但可能影响原数据
- 深拷贝
.copy()
完全隔离内存,适合需要数据隔离的场景 reshape()
在连续内存时生成视图,否则创建副本
-
性能优化
- 大数据处理优先使用视图避免内存复制
- 显式调用
.copy()
可在视图无法满足需求时强制创建独立副本
NumPy高级用法和性能优化(待续
)
四、NumPy知识点总结
-
核心价值
- NumPy以
ndarray
为核心,实现高性能多维数组运算,速度比Python原生列表快10-100倍 - 广播机制实现不同形状数组的智能运算,减少显式循环和内存复制
- 提供线性代数、统计、随机数生成等完备数学函数库
- NumPy以
-
核心能力
- 数据处理:支持从列表/文件/内存快速构建数组,类型控制精准(dtype)
- 运算体系:向量化运算+广播机制实现零循环代码,内置200+数学函数
- 内存管理:视图机制(reshape/T)避免数据复制,copy()实现深度克隆
- 维度操控:reshape/flatten/transpose满足任意维度变换需求
-
工程实践要点
- 优先使用
arr[::2]
向量化索引替代for
循环 - 利用
arr.reshape(3,-1)
自动计算缺失维度 - 通过
arr.copy()
隔离数据修改风险 - 使用
@
运算符简化矩阵乘法代码
- 优先使用
五、结语
NumPy作为Python科学计算的基石,其高效的多维数组操作和丰富的数学函数库,使其成为AI开发、数据分析、工程计算等领域的核心工具。通过掌握数组创建、向量化运算、广播机制等基础能力,开发者可大幅提升数据处理效率,为机器学习模型训练和算法实现奠定坚实基础。
下篇将介绍NumPy高级用法和性能优化,敬请期待!
相关文章:
【AI深度学习基础】NumPy完全指南入门篇:核心功能与工程实践(含完整代码)
NumPy系列文章 入门篇进阶篇终极篇 一、NumPy简介 NumPy(Numerical Python)是Python中科学计算的核心库,提供了高性能的多维数组对象和各种用于数组操作的函数。它是Python数据分析和科学计算的基础,被广泛应用于机器学习、数据…...
武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司举行校企联培座谈会
2025年2月21日下午,武汉大学生命科学学院与谱度众合(武汉)生命科技有限公司(以下简称“谱度众合”)在学院学术厅举行校企联培专业学位研究生合作交流会。武汉大学生命科学学院副院长刘星教授、生命科学学院周宇教授、产…...
小程序画带圆角的圆形进度条
老的API <canvas id"{{canvasId}}" canvas-id"{{canvasId}}" style"opacity: 0;" class"canvas"/> startDraw() {const { canvasId } this.dataconst query this.createSelectorQuery()query.select(#${canvasId}).bounding…...
MR-图解
1、不是所有的MR都适合combine 1.1、map端统计出了不同班级的每个学生的年龄 如:(class1, 14)表示class1班的一个学生的年龄是14岁。 第一个map任务: class1 14 class1 15 class1 16 class2 10第二个map任务: class1 16 class2 10 class…...
[深度学习] 大模型学习2-提示词工程指北
在文章大语言模型基础知识里,提示词工程(Prompt Engineering)作为大语言模型(Large Language Model,LLM)应用构建的一种方式被简要提及,本文将着重对该技术进行介绍。 提示词工程就是在和LLM聊…...
VSCode离线安装插件
最近在其他电脑设备上部署vscode环境出现问题,在vscode里直接安装插件失败,软件提示如下:(此前已经用此方法安装过中文插件) 这里我们选择手动下载,会自动在浏览器中跳转到该插件的下载链接并自动下载插件&…...
python-leetcode-删除并获得点数
740. 删除并获得点数 - 力扣(LeetCode) 解法 1:动态规划(O(n) 时间,O(n) 空间) class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…...
Spring Boot 流式响应豆包大模型对话能力
当Spring Boot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式 一、前言:关于流式响应的奇妙比喻 想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴…...
STM32G431RBT6——(1)芯片命名规则
相信很多新手入门STM学的芯片,是STM32F103C8T6,假如刷到个项目换个芯片类型,就会感到好难啊,看不懂,就无从下手,不知所云。其实没什么难的,对于一个个不同的芯片的区别,就像是学习包…...
React进阶之前端业务Hooks库(三)
前端业务Hooks库 hooks 方法localStorage和sessionStorager区别packages/hooks/src/useLocalStorageStatepackages/hooks/src/useSessionStorageStatepackages/hooks/src/createUseStorageState模块Hooks在不同场景下的应用Hooks陷阱前提例子useLatest和useMemoizedFn其他功能的…...
卷积神经网络梯度下降方向与参数更新方向的一致性论述
梯度下降是一种常用的优化算法,用于最小化损失函数,在机器学习和深度学习领域有着广泛的应用。分别对梯度下降、梯度方向以及参数更新采用负梯度方向的原因进行论述。 1.梯度下降 它的基本思想是通过迭代的方式来更新模型的参数,使得损失函数…...
python 视频网站爬虫教程,爬虫入门教程(付安装包)
文章目录 前言1. 环境准备Python安装选择Python开发环境安装必要库 2. 了解目标网站3. 发送请求获取页面内容4. 解析页面内容,提取视频链接5. 下载视频6. 处理反爬机制7. 完整代码示例注意事项 前言 以下为你生成一份 Python 视频网站爬虫教程,以爬取简…...
Is Noise Conditioning Necessary for Denoising Generative Models?论文阅读笔记
很吸引人的一个标题,很吸引人的一个作者,来读一读明神的新作,讲的是怎么把去噪领域的一些有意思的思想,特别是blind denoising和noise-level estimation的思想,应用到denoising diffusion模型中,从而去掉de…...
BIO、NIO、AIO、Netty从简单理解到使用
Java编程中BIO、NIO、AIO是三种不同的I/O(输入/输出)模型,它们代表了不同的I/O处理方式。 Netty就是基于Java的NIO(New Input/Output)类库编写的一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可…...
最新版 (持续更新)docker 加速源 linux yum 源
收藏两个网站,配置docker 加速源与yum 源。 docker 加速源链接 Docker/DockerHub 国内镜像源/加速列表(2月25日更新-长期维护)-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/2485043 yum 源 CentOS7停服后yum源配置…...
MapReduce编程模型
MapReduce编程模型 理解MapReduce编程模型独立完成一个MapReduce程序并运行成功了解MapReduce工程流程掌握并描述出shuffle全过程(面试)独立编写课堂及作业中的MR程序理解并解决数据倾斜 1. MapReduce编程模型 Hadoop架构图 Hadoop由HDFS分布式存储、M…...
开源|Documind协同文档(接入deepseek-r1、支持实时聊天)
Documind 🚀 项目介绍 Documind 一个支持实时聊天和接入deepseek-r1模型AI助手的协同文档编辑项目 前端:NextJS React TailwindCSS ShadcnUl Tiptap Zustand后端:NextJS Convex Liveblocks Clerk项目预览:Documind 预览…...
【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝
【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候,通过命令行注册相应的服务(比如cloudwego项目的demo_proto以及user服务)失败。 解决办法 经过分析,是…...
`maturin`是什么:matu rus in python
maturin是什么 maturin 是一个用于构建和发布 Rust 编写的 Python 绑定库的工具。它简化了将 Rust 代码集成到 Python 项目中的过程,支持创建不同类型的 Python 包,如纯 Python 包、包含 **Rust (系统编程语言)**扩展模块的包等。以下为你详细介绍 maturin 的相关信息并举例…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_file_t
ngx_file_t 定义在 src/core/ngx_core.h typedef struct ngx_file_s ngx_file_t;ngx_file_s 定义 在 src/core/ngx_file.h struct ngx_file_s {ngx_fd_t fd;ngx_str_t name;ngx_file_info_t info;off_t …...
【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取
【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取 一、问题背景 政府的icp备案时,或者某些三方SDK以来的管理后台,都需要配置鸿蒙应用的公钥和证书MD5指纹 二、解决方案 专有名词解释: 华为AppGallery Connect简称 AGC平台࿰…...
登录次数限制
文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…...
两台互通的服务器使用Docker部署一主两从MySQL8.0.35
文章目录 1. 使用Docker Overlay网络(需Swarm模式)在服务器1(172.25.0.19)上:在服务器2(172.25.0.20)上:创建 overlay 网络(172.25.0.19): 2. 部署…...
使用Semantic Kernel:对DeepSeek添加自定义插件
SemanticKernel介绍 Semantic Kernel是一个SDK,它将OpenAI、Azure OpenAI等大型语言模型与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点。 为什么需要添加插件? 大语言模型虽然具有强大的自然语言理解和…...
DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...
mysql数据迁移到SQLserver: 构建数据迁移脚本
文章目录 引言转换方法将 MySQL 脚本转换为 SQL Server 脚本主要修改点I 迁移案例菜单数据迁移迁移脚本1迁移脚本2I MySQL中将INT类型转换为字符串的方法CAST函数(标准SQL)CONVERT函数(MySQL特有)隐式转换(上下文触发)修改表结构(永久转换)保留前导零用…...
【Python在校课堂笔记】Python第1节课 【课下总结】
2025 - 02 - 28 - 第 63 篇 Author: 郑龙浩 / 仟濹 【Python在校课堂笔记】 Python第1节课 【课下总结】 2025-02-27上课 写这篇笔记不仅仅为了写作业,也是想总结一下本节课的内容加深印象,同时发布博客方便复习。 一 print() 的多种使用 1 直接打印…...
3分钟idea接入deepseek
DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型,背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术,拥有多个版本的模型,如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…...
【论文学习】DeepSeek-R1 总结
文章目录 Abstract1. Introduction2. Approach2.1. Overview2.2. DeepSeek-R1-Zero: Reinforcement Learning on the Base Model2.3. DeepSeek-R1: Reinforcement Learning with Cold Start2.4. Distillation: Empower Small Models with Reasoning Capability 3. Experiment3.…...
《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战
第7集: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送,还是多人协作工具,WebSocket 都是实现高效实时通信的最佳选择之一。本…...
五、数据库索引详解:作用、原理与使用指南
数据库索引详解:作用、原理与使用指南 一、索引的作用(为什么需要索引?) 1. 生活中的类比 想象你要在一本 500 页的书中快速找到「数据库索引」相关内容: 没有目录:需要逐页翻找 → 全表扫描有目录&…...
如果使用MODBUS通用类进行通信
1. 初始化串口 在使用 ModbusRTU 类之前,需要先初始化串口。以下是一个示例代码: cpp复制 // 初始化 ModbusRTU 对象 ModbusRTU modbus;// 配置串口参数 modbus.initializePort("COM5", 115200); // 使用 COM5 和波特率 115200 modbus.setD…...
osgEarth安装总结
第一步:安装OSG 直接通过git下载源码,使用cmake进行编译, git clone --depth 1 https://github.com/openscenegraph/OpenSceneGraph.git mkdir build cd build cmake .. make sudo make isntall编译过程中缺什么库,就安装什么库 …...
自动化测试无法启动(java.net.SocketException)
在运行测试代码,对浏览器进行自动化操作时,遇到了以下问题,添加依赖,编写了测试代码,但是程序无法运行 这个有两种原因(我使用的是谷歌浏览器): 网络问题: 因为需要从GitHub上下载对应包,所以有时候可能会出现网络问题,这个时候可以打开VPN之后,重新对程序进行启动 浏览器版本…...
MOM成功实施分享(七)电力电容制造MOM工艺分析与解决方案(第一部分)
声明:文章仅用于交流学习,不用于商业项目实施,图片来源于网络,如有侵犯权利,请联系作者及时删除。 本方案旨在对电力电容(PEC和PQM型号)制造工艺深度分析,结合管理要求设计MOM相关功…...
如何查看react的版本号
方法一:通过 package.json 查看(静态查看) 打开项目根目录下的 package.json 文件在 dependencies 或 devDependencies 字段中查找 react 和 react-dom 的版本号:{"dependencies": {"react": "^18.2.0&…...
STM32呼吸灯实验手册(TIM定时器)
一、实验目标 使用TIM定时器的PWM模式控制LED亮度实现LED渐亮渐灭的呼吸灯效果掌握HAL库的TIM配置方法 二、硬件准备 开发板:STM32F103C8T6LED模块:LED串联220Ω电阻两组USB-TTL调试器硬件连接 三、软件配置(STM32CubeMX) 打开…...
Element-Plus,使用 El-form中 的 scroll-to-error 没有效果问题记录
因业务需要表单组件中嵌套着表格列表,内容比较多; 所以需要表单校验不通过时,自动定位到不通过的节点; 但发现这个像是没有起到效果一样,后面就是排查的思路了: 容器高度问题:如果表单容器的高度…...
探究高空视频全景AR技术的实现原理
1. 引言 笔者认为现阶段AR技术的应用是还是比较坑爹的,大都是噱头多但是实用的成分少,拿出来做做DEMO是可以,但是难以在实际的项目中落地产生实际的经济价值。一方面是很难在业务上难以找到合适的应用场景(可能管线相关的项目算一…...
大连指令数据集的创建--数据收集与预处理_02
1.去哪儿爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:去哪儿(https://travel.qunar.com/trav…...
SOME/IP-SD -- 协议英文原文讲解5
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…...
C#异步编程之async与await
一:需求起因 在 C# 中使用异步编程(特别是使用 async 和 await 关键字)通常是为了提高应用程序的响应性和性能,特别是在需要进行 I/O 操作或执行长时间运行的任务时。 常见应用场景如下: 1. 网络请求 HTTP 请求&…...
Spring Security 登录流程中的自定义解密实现
文章目录 前言1. Spring Security 核心组件介绍2. 前端密码多加密场景的处理3. 重写 DaoAuthenticationProvider4. 让 Spring Security 使用自定义 Provider5. 验证流程总结6. 完整性与调试 总结 前言 在现代 Web 安全体系中,Spring Security 是最常用的安全框架之一…...
考研出分24小时,人类精神状态图鉴
2月24日,上午10点起,各省考研初试成绩陆续公布,考生们或紧张的输入准考证号,或抱团等待“审判”。然而更魔幻的还在后头——下午4点,教育部竟在同一天直接发布了《2025年研考国家分数线》。 不少网友表示:…...
顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-大模型电话机器人
语音流直接对接Realtime API 多模态大模型 直接把音频流输出给大模型,大模型返回音频流。 顶顶通CTI对Realtime API 的支持 提供了以下2个APP可对接任意 •cti_audio_stream 通过TCP推流和播放流,适合用于人机对话场景。 •cti_unicast_start 通过旁…...
《Kafka 理解: Broker、Topic 和 Partition》
Kafka 核心架构解析:从概念到实践 Kafka 是一个分布式流处理平台,广泛应用于日志收集、实时数据分析和事件驱动架构。本文将从 Kafka 的核心组件、工作原理、实际应用场景等方面进行详细解析,帮助读者深入理解 Kafka 的架构设计及其在大数据领域的重要性。 1. Kafka 的背…...
【前端】XML,XPATH,与HTML的关系
XML与HTML关系 XML(可扩展标记语言)和 HTML(超文本标记语言)是两种常见的标记语言,但它们有不同的目的和用途。它们都使用类似的标记结构(标签),但在设计上存在一些关键的差异。 XML…...
(九)趣学设计模式 之 桥接模式!
目录 一、 啥是桥接模式?二、 为什么要用桥接模式?三、 桥接模式的实现方式四、 桥接模式的优缺点五、 桥接模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
Web Worker 使用教程
一、概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带…...
算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器
一、前言 本文相关的全部源码和RtspSever库,我已打包上传,欢迎大家免费下载,testRTSPSever。 每一个嵌入式视觉算法工程师,都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入,可…...