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

三、归一化与标准化


归一化与标准化

  • 前言
  • 一、最小最大值归一化
    • 1.1 原理(公式)
    • 1.2 API 介绍
      • 1.2.1 参数介绍
      • 1.2.2 属性介绍
      • 1.2.3 注意事项
      • 1.2.4 代码演示
    • 1.3 举例说明
  • 二、标准化
    • 2.1 原理(公式)
    • 2.2 API 介绍
      • 2.2.1 参数介绍
      • 2.2.2 属性介绍
      • 2.2.3 注意事项
      • 2.2.4 代码演示
    • 2.3 举例说明
  • 三、案例代码:利用KNN算法进行鸢尾花分类
  • 总结


前言

  • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级容易影响(支配)目标结果,使得一些模型(算法)无法学习到其它的特征。
  • 所以我们需要对特征进行预处理,让不同特征在同一尺度下进行比较,从而避免因特征值大小差异而导致的模型训练偏倚。

一、最小最大值归一化

1.1 原理(公式)

  • 这种方法将特征值缩放到指定的区间内,默认是0到1之间。计算公式如下:
    x n o r m = x − m i n ( x ) m a x ( x ) − m i n ( x ) x_{norm} = \frac{x-min(x)}{max(x)-min(x)} xnorm=max(x)min(x)xmin(x)
  • 如果需要缩放至其他区间[a, b],则可以使用:
    x n o r m = a + ( x − m i n ( x ) m a x ( x ) − m i n ( x ) ) ⋅ ( b − a ) x_{norm} = a + (\frac{x-min(x)}{max(x)-min(x)}) \cdot (b-a) xnorm=a+(max(x)min(x)xmin(x))(ba)

1.2 API 介绍

  • sklearn.preprocessing.MinMaxScaler ( )

1.2.1 参数介绍

  • feature_range:tuple (min, max), default=(0, 1)
    • 描述:这个参数用于设定缩放的范围。默认情况下,数据会被缩放到 [0, 1] 范围内。但用户可以根据需要设定其他范围,例如 [-1, 1]。
    • 作用:通过调整缩放范围,可以对数据的分布进行更精细的控制,以适应不同的机器学习算法和数据特点。
  • copy:boolean, optional, default=True
    • 描述:这个参数用于指定是否将转换后的数据覆盖原数据。如果设置为 True,则不会修改原始数据,而是返回一个新的缩放后的数据数组。如果设置为 False,则会在原地修改原始数据。
    • 作用:通过控制是否覆盖原数据,可以保护原始数据的完整性,避免在数据处理过程中发生数据丢失或修改。
  • clip:boolean, optional, default=False
    • 描述:clip 参数是一个布尔值,用于控制是否对变换后的数据进行裁剪。
    • 作用:当 clip=True 时,变换后的数据将被裁剪到指定的范围内,确保数据的一致性和有效性;当 clip=False 时,变换后的数据可能超出指定的范围,这需要根据具体情况来决定是否启用裁剪功能。

1.2.2 属性介绍

在 MinMaxScaler 类中,还有一些重要的属性,用于存储缩放过程中的相关信息:

  • min_:ndarray of shape (n_features,)
    • 描述:存储每个特征调整后的最小值。
  • scale_:ndarray of shape (n_features,)
    • 描述:存储每个特征数据缩放的比例。这个比例是通过计算特征的最大值和最小值之差,然后除以指定的缩放范围(feature_range)来得到的。
  • data_min_ 和 data_max_:ndarray of shape (n_features,)
    • 描述:分别存储每个特征在训练数据中的最小值和最大值。这些值是在调用 fit 或 fit_transform 方法时计算得到的。

1.2.3 注意事项

  • 归一化受到最大值与最小值的影响,这种方法容易受到异常数据的影响, 鲁棒性较差,适合传统精确小数据场景

1.2.4 代码演示

代码如下(示例):

# 导包
from sklearn.preprocessing import MinMaxScaler  # 归一化的类# 1. 准备特征数据.  每个子列表 = 1个样本(Sample)
data = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 2. 创建归一化对象.
transfer = MinMaxScaler()# 3. 具体的 归一化动作.
# fit_transform(): 训练 + 转换 => 适用于 训练集.
# transform(): 直接转换 => 适用于 测试集.
new_data = transfer.fit_transform(data)# 4. 打印 归一化后的结果
print(f'归一化后, 数据集为: {new_data}') #  [[1.         0.         0.         0.        ]#	[0.         1.         1.         0.83333333]#	[0.5        0.5        0.6        1.        ]]

1.3 举例说明

  • 1.有以下一个数据集,包含两个特征:年龄(Age)和收入(Income)。我们希望这两个特征进行归一化处理。
AgeIncome
2030000
2232000
3555000
4575000
5085000
  • 2.我们将年龄和收入都归一化到0到1的范围内。

    • 2.1 年龄归一化:
      A g e n o r m = A g e − m i n ( A g e ) m a x ( A g e ) − m i n ( A g e ) Age_{norm} = \frac{Age-min(Age)}{max(Age)-min(Age)} Agenorm=max(Age)min(Age)Agemin(Age)

      • A g e n o r m = 20 − 20 50 − 20 = 0 Age_{norm} = \frac{20-20}{50-20} = 0 Agenorm=50202020=0
      • A g e n o r m = 22 − 20 50 − 20 = 0.0667 Age_{norm} = \frac{22-20}{50-20} = 0.0667 Agenorm=50202220=0.0667
      • A g e n o r m = 35 − 20 50 − 20 = 0.5 Age_{norm} = \frac{35-20}{50-20} = 0.5 Agenorm=50203520=0.5
      • A g e n o r m = 45 − 20 50 − 20 = 0.8333 Age_{norm} = \frac{45-20}{50-20} = 0.8333 Agenorm=50204520=0.8333
      • A g e n o r m = 50 − 20 50 − 20 = 1 Age_{norm} = \frac{50-20}{50-20} = 1 Agenorm=50205020=1
    • 2.2 收入归一化:
      I n c o m e n o r m = I n c o m e − m i n ( I n c o m e ) m a x ( I n c o m e ) − m i n ( I n c o m e ) Income_{norm} = \frac{Income-min(Income)}{max(Income)-min(Income)} Incomenorm=max(Income)min(Income)Incomemin(Income)

      • I n c o m e n o r m = 30000 − 30000 85000 − 30000 = 0 Income_{norm} = \frac{30000-30000}{85000-30000} = 0 Incomenorm=85000300003000030000=0
      • I n c o m e n o r m = 32000 − 30000 85000 − 30000 = 0.0364 Income_{norm} = \frac{32000-30000}{85000-30000} = 0.0364 Incomenorm=85000300003200030000=0.0364
      • I n c o m e n o r m = 55000 − 30000 85000 − 30000 = 0.4545 Income_{norm} = \frac{55000-30000}{85000-30000} = 0.4545 Incomenorm=85000300005500030000=0.4545
      • I n c o m e n o r m = 75000 − 30000 85000 − 30000 = 0.8182 Income_{norm} = \frac{75000-30000}{85000-30000} = 0.8182 Incomenorm=85000300007500030000=0.8182
      • I n c o m e n o r m = 85000 − 30000 85000 − 30000 = 1 Income_{norm} = \frac{85000-30000}{85000-30000} = 1 Incomenorm=85000300008500030000=1
  • 3 原数据集就会变成下面这样

AgeIncome
00
0.06670.0364
0.50.4545
0.83330.8182
11

二、标准化

2.1 原理(公式)

  • 标准化是将特征值转换为具有零均值和单位方差的形式。计算公式如下:
    x s t d = x − μ σ x_{std} = \frac{x-μ}{σ} xstd=σxμ
  • 其中, μ μ μ 是特征的平均值, σ σ σ 是特征的标准差。

2.2 API 介绍

  • sklearn.preprocessing.StandardScaler( )

2.2.1 参数介绍

  • copy:类型:布尔值(Boolean);默认值:True
    • 说明:如果设置为 True,则会在操作后创建数据的副本,不会修改原始数据。如果设置为 False,则不会创建副本,操作后会直接替换原始数据。
  • with_mean:类型:布尔值(Boolean);默认值:True
    • 说明:如果设置为 True,则在转换数据时会减去均值(即进行中心化)。如果设置为 False,则不会在转换时减去均值,但 fit 操作仍然会计算均值,并可以通过 mean_ 属性查看。
  • with_std:类型:布尔值(Boolean);默认值:True
    • 说明:如果设置为 True,则在转换数据时会除以标准差(即进行缩放)。如果设置为 False,则不会在转换时除以标准差,但 fit 操作仍然会计算标准差,并可以通过 scale_ 属性查看。

2.2.2 属性介绍

  • scale_
    • 存放每个特征的标准差,是一个列表,长度为特征数。
  • mean_:
    • 存放每个特征的均值,是一个列表,长度为特征数。
  • var_
    • 存放每个特征的方差,是一个列表,长度为特征数。
  • feature_names_in_
    • 存放特征的名字,只有导入的数据中有特征名字时才会被定义。
  • n_samples_seen_
    • 导入样本数据的个数。

2.2.3 注意事项

  • 对于标准化来说,如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大。

2.2.4 代码演示

代码如下(示例):

from sklearn.preprocessing import StandardScaler# 1. 准备特征数据.  每个子列表 = 1个样本(Sample)
data = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 2. 创建 标准化 对象.
transfer = StandardScaler()# 3. 具体的 标准化 动作.
# fit_transform(): 训练 + 转换 => 适用于 训练集.
# transform(): 直接转换 => 适用于 测试集.
new_data = transfer.fit_transform(data)# 4. 打印 标准化 后的结果
print(f'标准化后, 数据集为: {new_data}')# 5. 打印每个特征列的 平均值 和 方差 和 标准差
print(f'均值: {transfer.mean_}')
print(f'方差: {transfer.var_}')
print(f'标准差: {transfer.scale_}')
print(f'样本数: {transfer.n_samples_seen_}')

2.3 举例说明

  • 1.有以下一个数据集,包含两个特征:年龄(Age)和收入(Income)。我们希望这两个特征进行归一化处理。
AgeIncome
2030000
2232000
3555000
4575000
5085000
  • 2.我们将年龄和收入标准化到具有零均值和单位方差的形式。

    • 2.1 年龄标准化:
      x s t d = x − μ σ x_{std} = \frac{x-μ}{σ} xstd=σxμ
      μ A g e = 20 + 22 + 35 + 45 + 50 5 = 34.4 μ_{Age} = \frac{20+22+35+45+50}{5} = 34.4 μAge=520+22+35+45+50=34.4
      σ A g e = ( 20 − 34.4 ) 2 + ( 22 − 34.4 ) 2 + ( 35 − 34.4 ) 2 + ( 45 − 34.4 ) 2 + ( 50 − 34.4 ) 2 5 = 142.8856 ≈ 11.9536 σ_{Age} = \sqrt{\frac{(20-34.4)^2+(22-34.4)^2+(35-34.4)^2+(45-34.4)^2+(50-34.4)^2}{5}} = \sqrt{142.8856} ≈ 11.9536 σAge=5(2034.4)2+(2234.4)2+(3534.4)2+(4534.4)2+(5034.4)2 =142.8856 11.9536

      • A g e s t d = 20 − 34.4 11.9536 ≈ − 1.2047 Age_{std} = \frac{20-34.4}{11.9536} ≈ -1.2047 Agestd=11.95362034.41.2047
      • A g e s t d = 22 − 34.4 11.9536 ≈ − 1.037 Age_{std} = \frac{22-34.4}{11.9536} ≈ -1.037 Agestd=11.95362234.41.037
      • A g e s t d = 35 − 34.4 11.9536 ≈ 0.0502 Age_{std} = \frac{35-34.4}{11.9536} ≈ 0.0502 Agestd=11.95363534.40.0502
      • A g e s t d = 45 − 34.4 11.9536 ≈ 0.8868 Age_{std} = \frac{45-34.4}{11.9536} ≈ 0.8868 Agestd=11.95364534.40.8868
      • A g e s t d = 50 − 34.4 11.9536 ≈ 1.3050 Age_{std} = \frac{50-34.4}{11.9536} ≈ 1.3050 Agestd=11.95365034.41.3050
    • 2.2 收入标准化:
      μ I n c o m e = 30000 + 32000 + 55000 + 75000 + 85000 ​ 5 = 55 , 400 μ_{Income} = \frac{30000+32000+55000+75000+85000​}{5} = 55,400 μIncome=530000+32000+55000+75000+85000​=55,400
      σ I n c o m e = ( 30000 − 55400 ) 2 + ( 32000 − 55400 ) 2 + ( 55000 − 55400 ) 2 + ( 75000 − 55400 ) 2 + ( 85000 − 55400 ) 2 5 = 486176800 ≈ 22049 σ_{Income} = \sqrt{\frac{(30000-55400)^2+(32000-55400)^2+(55000-55400)^2+(75000-55400)^2+(85000-55400)^2}{5}} = \sqrt{486176800} ≈ 22049 σIncome=5(3000055400)2+(3200055400)2+(5500055400)2+(7500055400)2+(8500055400)2 =486176800 22049

      • I n c o m e n o r m = 30000 − 55400 22049 = − 1.1520 Income_{norm} = \frac{30000-55400}{22049} = -1.1520 Incomenorm=220493000055400=1.1520
      • I n c o m e n o r m = 32000 − 55400 22049 = − 1.0613 Income_{norm} = \frac{32000-55400}{22049} = -1.0613 Incomenorm=220493200055400=1.0613
      • I n c o m e n o r m = 55000 − 55400 22049 = − 0.0181 Income_{norm} = \frac{55000-55400}{22049} = -0.0181 Incomenorm=220495500055400=0.0181
      • I n c o m e n o r m = 75000 − 55400 22049 = 0.8889 Income_{norm} = \frac{75000-55400}{22049} = 0.8889 Incomenorm=220497500055400=0.8889
      • I n c o m e n o r m = 85000 − 55400 22049 = 1.3425 Income_{norm} = \frac{85000-55400}{22049} = 1.3425 Incomenorm=220498500055400=1.3425
  • 3 原数据集就会变成下面这样

AgeIncome
-1.2047-1.1520
-1.037-1.0613
0.0502-0.0181
0.88680.8889
1.30501.3425

三、案例代码:利用KNN算法进行鸢尾花分类

代码如下(示例):

# 0.导入工具包
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 1.加载数据集
iris_data = load_iris()
# print(iris_data)
# print(iris_data.target)# 2.数据展示
iris_df = pd.DataFrame(iris_data['data'], columns=iris_data.feature_names)
iris_df['label'] = iris_data.target
# print(iris_data.feature_names)
# sns.lmplot(x='sepal length (cm)',y='sepal width (cm)',data = iris_df,hue='label')
# plt.show()# 3.特征工程(预处理-标准化)
# 3.1 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.3, random_state=22)
print(len(iris_data.data))
print(len(x_train))
# 3.2 标准化
process = StandardScaler()
x_train = process.fit_transform(x_train)
x_test = process.transform(x_test)
# 4.模型训练
# 4.1 实例化
model = KNeighborsClassifier(n_neighbors=3)
# 4.2 调用fit法
model.fit(x_train,y_train)
# 5.模型预测
x = [[5.1, 3.5, 1.4, 0.2]]
x=process.transform(x)
y_predict =model.predict(x_test)
print(model.predict_proba(x))# 6.模型评估(准确率)
# 6.1 使用预测结果
acc =accuracy_score(y_test,y_predict)
print(acc)# 6.2 直接计算
acc = model.score(x_test,y_test)
print(acc)

总结

  • 文章总结了特征预处理中的归一化和标准化,并对每一种方法做了详细讲解,最后用一个综合案例,使用前面学过的的KNN算法来验证预处理的必要性。

相关文章:

三、归一化与标准化

归一化与标准化 前言一、最小最大值归一化1.1 原理(公式)1.2 API 介绍1.2.1 参数介绍1.2.2 属性介绍1.2.3 注意事项1.2.4 代码演示 1.3 举例说明 二、标准化2.1 原理(公式)2.2 API 介绍2.2.1 参数介绍2.2.2 属性介绍2.2.3 注意事项…...

B2105 矩阵乘法

B2105 矩阵乘法 #include <iostream> using namespace std; int main(){int n,m,k;cin>>n>>m>>k;int arr1[n][m];int arr2[m][k];for(auto & line:arr1){for(auto & x: line){cin>>x;}}for(auto & line:arr2){for(auto & x: lin…...

centos之下的mysql8的安装

文章目录 1.mysql.com进入(网址栏)2.xshell操作2.1拖拽上传2.2安装发布包2.3检查情况2.4安装mysql2.5手动启动2.6查看状态2.7查看随机密码2.8登录2.9重置密码 1.mysql.com进入(网址栏) 找下面的这个download按钮&#xff1a; 一直往下面划&#xff1a;找到下面的这个 下面的这个…...

计算机导论

概述 计算机简史 1935年代&#xff0c;英国数学家图灵(Alan Turing)提出“图灵机”&#xff0c;奠定了计算机的理论基础。 1952年&#xff0c;冯诺依曼确定了计算机由运算器、控制器、存储器、输入、输出等5部分组成&#xff08;Von Neumann 体系结构&#xff09;。 60年代…...

力扣209-长度最小的子数组-滑动窗口思想

题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&am…...

Xilinx 7系列FPGA PCI Express IP核简介

前言&#xff1a;Xilinx7系列FPGA集成了新一代PCI Express集成块&#xff0c;支持8.0Gb/s数据速率的PCI Express 3.0。本文介绍了7系列FPGA PCIe Gen3的应用接口及一些特性。 1. PCI Express规范演进 PCIe是一种高速串行计算机扩展总线标准&#xff0c;旨在替代传统的PCI和AG…...

红包雨html

1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…...

js 基础补充3

1. 闭包 在函数内部定义的函数&#xff0c;可以访问改函数的属性和方法 私有属性 延长变量的生命周期&#xff0c;更好的避免命名冲突 缺点&#xff1a;内存消耗比较大&#xff0c;不建议频繁使用 2. js 原型 原型链 访问对像的属性方法&#xff0c;不光会在对象上查找还会在…...

Invalid bean definition with name ‘employeeMapper‘ defined in file

参考以下博客&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version> </dependency> 总结&#xff1a; 1. 拉取老项目的时候要特…...

悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版

金秋时节&#xff0c;天高气爽&#xff0c;正是出游的好时节。不论是家庭自驾游&#xff0c;还是朋友结伴出游&#xff0c;一款好看又好开的车绝对是提升旅行品质的重要因素。江铃集团新能源易至汽车EV3青春版&#xff0c;凭借其超高安全性、便捷操作性、卓越性能&#xff0c;成…...

测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时

一、测试TCP、UDP的带宽 作为服务器&#xff1a;iperf3 -s -i 1 &#xff08;或者用CloudCampus软件&#xff0c;或者iperf magic&#xff09; Wi-Fi 发送、接收吞吐率的测试_magic iperf-CSDN博客 车机作为iperf3服务器&#xff0c;电脑作为iperf3得客户端&#xff0c;分别…...

redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析

155属性 zlbytes zltail zllen entryX zlend 类型 uint32 t uint32 t uint16 t 列表节点 uint8 t 长度 4字节 4字节 2字节 不定 1字节 用途 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配&#xff0c;或者计算 zlend 的位置时使用 记录压缩列表表尾节点距离压缩…...

IDE使用技巧与插件推荐

集成开发环境&#xff08;IDE&#xff09;是开发者日常工作中的重要工具&#xff0c;合理使用IDE和合适的插件&#xff0c;能大大提高开发效率。本文将分享常见IDE&#xff08;如VS Code、IntelliJ IDEA等&#xff09;的一些高效使用技巧&#xff0c;以及开发过程中常用的插件推…...

1020接口测试面试题随记

1.测试中对于上下游承接的业务是怎么处理的 针对上下游承接的业务&#xff0c;我会采取以下措施进行处理&#xff1a;首先&#xff0c;明确上下游系统的接口和依赖关系&#xff0c;确保理解数据流和业务逻辑的连接点。其次&#xff0c;进行接口测试&#xff0c;验证上下游系统…...

Zotero7最新(2024)翻译问题——配置 百度API翻译

在使用翻译之前&#xff0c;首先要确保已经安装了插件&#xff1a;Translate for Zotero 关于插件的安装可以参考这篇文章&#xff1a; Zotero7最新&#xff08;2024&#xff09;安装、配置步骤-CSDN博客 接下来进入正题。 当使用Zotero7对英文文献翻译时&#xff0c;可能会…...

python程序设计员—练习笔记

目录 基础处理 字符串列表字典运算符正则表达式re库requestsBeautiful Soupjieba库分词模式基于TF-IDF算法的关键词提取 基于TextRank算法的关键词提取pandas 打开有多个表的.xlsx文件 基础处理 字符串 str_ str_.lower()lower()函数&#xff1a;将字符中的大写字母转换成小…...

1.DBeaver连接hive数据库

1.hive开启远程服务&#xff0c;linux中直接输入&#xff1a;hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库&#xff0c;新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击&#xff0c;新建sql编辑器 11.执行sql 12.调整字…...

CODESYS随机动态图案验证码制作详细案例(三)

#使用CODESYS软件模仿网页端动态图案验证码的制作详细案例# 前言: 通过上篇图案验证码的实际测试,我们已经完成了该案例的制作,但是在项目应用中,我们想对该功能直接调用,就需要将具有一定功能的程序代码或可视化进行封装成库文件。我们熟知,CODESYS有丰富的库文件,有…...

NodeJS 使用百度翻译API

在大数据处理中&#xff0c;经常需要大批量地翻译短小的文字&#xff0c;使用在线翻译平台的API 调用能够大幅度提高效率。 最近尝试了一下。 第一步在百度翻译开放平台注册 百度翻译开放平台 (baidu.com) 申请APPID 和SECRET加密码 源代码&#xff08;mjs&#xff09; …...

摩熵数科数据产品阵容BCPM

摩熵数科基本介绍 摩熵数科&#xff08;成都&#xff09;医药科技有限公司BCPMdata Pharma Technology &#xff08;Chengdu&#xff09;Co.,Ltd以“探索生命科学数据本源&#xff0c;构建全产业链数据应用生态”为愿景&#xff0c;致力于成为生命科学领域全球领先的数据系统与…...

告别 AI 失忆!基于 Harness 记忆模型,解密 SpreadContext 多实例同步引擎

在日常与企业级客户及前端开发者的交流中&#xff0c;我经常听到这样的痛点&#xff1a;“我们成功接入了大模型&#xff0c;但它总是‘睁眼瞎’。用户在表格里改了数据&#xff0c;AI 不知道&#xff1b;AI 修改了单元格&#xff0c;UI 没有同步。聊了几轮之后&#xff0c;大模…...

Spread.NET 10-19.1 都可以提供

关于 Spread.NET提供类似 Excel 的电子表格体验。Spread.NET 可帮助您创建电子表格、网格、仪表板和窗体。它包含一个强大的计算引擎&#xff0c;提供 450 多个函数&#xff0c;并支持导入和导出 Excel 电子表格。利用丰富的 .NET 电子表格 API 和强大的计算引擎&#xff0c;您…...

透明背景图片制作方法全解析:2026年最实用的免费抠图工具推荐

最近有个朋友问我&#xff0c;怎样快速把商品照片的背景去掉&#xff0c;做电商上传用。我才意识到&#xff0c;很多人其实都被"透明背景图片制作方法"这个问题困扰着——无论是证件照换底色、商品图去背景&#xff0c;还是做设计素材&#xff0c;都需要一个趁手的抠…...

车载网络测试演进:从CAN总线到TSN与SOA的实战解析

1. 项目概述&#xff1a;一场关于“神经”与“体检”的进化史几年前&#xff0c;我和几个同行在路边摊就着麻小和扎啤&#xff0c;聊起车载以太网测试&#xff0c;那时它还是个新鲜玩意儿&#xff0c;大家讨论的焦点更多是“要不要做”和“怎么做”。几年过去&#xff0c;再回头…...

当AI的键值记忆遇上大脑:原来我们和AI共享同一套记忆逻辑

导语在日常经验中&#xff0c;我们常把“遗忘”理解为信息的流失&#xff1a;时间久了&#xff0c;记忆就会慢慢消失&#xff1b;学习新知识&#xff0c;也可能覆盖旧内容。然而&#xff0c;从短视频推荐到大语言模型&#xff0c;再到人类被线索唤醒的记忆体验&#xff0c;这些…...

2026厦门国际智能交通运输产业博览会开幕:海外需求与国内先进技术的双向奔赴

2026年5月13日&#xff0c;为期三天的2026厦门国际智能交通运输产业博览会&#xff08;CITSE 2026&#xff0c;以下简称“智交会”&#xff09;隆重开幕。本届智交会由中国智能交通协会联合厦门会展集团股份有限公司共同举办&#xff0c;以“聚焦产业创新变革&#xff0c;赋能出…...

Python实时通信实战:Flask-SocketIO深度解析

Python实时通信实战&#xff1a;Flask-SocketIO深度解析 引言 在Python开发中&#xff0c;实时通信是构建现代Web应用的核心技术。作为一名从Rust转向Python的后端开发者&#xff0c;我深刻体会到Flask-SocketIO在实时通信方面的优势。Flask-SocketIO为Flask应用提供了WebSocke…...

STM32H743以太网实战:基于CubeMX 6.8.0与LAN8720的LWIP移植避坑指南

1. 环境准备与CubeMX基础配置 折腾了一周终于把STM32H743的以太网调通&#xff0c;发现网上大多数教程都存在配置遗漏。这里分享我的完整配置流程&#xff0c;从CubeMX安装到最终Ping通&#xff0c;每个步骤都经过实测验证。 首先确保安装STM32CubeMX 6.8.0和对应的HAL库。我遇…...

录播姬:如何轻松录制mikufans直播并解决常见问题?

录播姬&#xff1a;如何轻松录制mikufans直播并解决常见问题&#xff1f; 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 录播姬是一款专为mikufans直播平台设计的开源录制工具&#x…...

AWE Designer生成的awb文件到底是什么?一份给嵌入式音频开发者的二进制文件解析与烧录避坑指南

AWB文件深度解析&#xff1a;嵌入式音频开发者的二进制文件操作指南 在嵌入式音频开发领域&#xff0c;AWE Designer工具链生成的AWB文件常常让开发者感到神秘又困惑。这个看似普通的二进制文件&#xff0c;实际上承载着音频算法实现的核心逻辑。许多开发者在烧录AWB文件到Flas…...