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

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.17 掩码数组:缺失值处理的优雅方案

在这里插入图片描述

2.17 掩码数组:缺失值处理的优雅方案

目录
《掩码数组:缺失值处理的优雅方案》
2.17.1 masked_array 原理
2.17.2 运算传播规则
2.17.3 与 Pandas NA 的对比
2.17.4 气象数据清洗案例
2.17.5 性能损耗分析
2.17.6 最佳实践与注意事项
2.17.7 总结
2.17.8 参考文献

2.17.1 masked_array 原理

NumPy 的 masked_array 是处理缺失值的一种优雅方案。它通过在一个数据数组上添加一个布尔掩码数组,来标记哪些元素是缺失的。

  • 掩码数组的基本概念:什么是掩码数组,为什么需要它。
  • 创建掩码数组:如何创建和初始化 masked_array
  • 掩码数组的属性: understanding the attributes of a masked_array.
masked_array 原理
基本概念
掩码数组是什么
为什么需要掩码数组
创建掩码数组
使用 np.ma.array
使用 np.ma.masked_array
使用 np.ma.masked_values
使用 np.ma.masked_where
掩码数组的属性
数据属性
掩码属性
填充值属性
2.17.1.1 掩码数组的基本概念

掩码数组 是一种包含两个部分的数据结构:一个数据数组和一个布尔掩码数组。数据数组存储实际的数据,布尔掩码数组标记哪些数据是无效的(缺失或无效)。

import numpy as np
import numpy.ma as ma# 创建一个简单的数据数组
data = np.array([1, 2, 3, 4, 5])# 创建一个掩码数组
mask = np.array([False, True, False, True, False])  # True 表示该位置的数据无效
masked_data = ma.array(data, mask=mask)print(f"数据数组: {data}")
print(f"掩码数组: {mask}")
print(f"掩码数据数组: {masked_data}")  # 无效数据会被显示为 --
2.17.1.2 创建掩码数组

NumPy 提供了多种方法来创建 masked_array

# 使用 np.ma.array
masked_data1 = ma.array([1, 2, 3, 4, 5], mask=[False, True, False, True, False])
print(f"masked_data1: {masked_data1}")# 使用 np.ma.masked_array
masked_data2 = ma.masked_array([1, 2, 3, 4, 5], mask=[False, True, False, True, False])
print(f"masked_data2: {masked_data2}")# 使用 np.ma.masked_values
masked_data3 = ma.masked_values([1, 2, 3, 4, 5], 2)  # 2 被标记为无效
print(f"masked_data3: {masked_data3}")# 使用 np.ma.masked_where
condition = np.array([False, True, False, True, False])
masked_data4 = ma.masked_where(condition, [1, 2, 3, 4, 5])
print(f"masked_data4: {masked_data4}")
2.17.1.3 掩码数组的属性

masked_array 有许多有用的属性,可以帮助我们更好地理解和操作数据。

# 数据属性
print(f"数据: {masked_data1.data}")# 掩码属性
print(f"掩码: {masked_data1.mask}")# 填充值属性
print(f"填充值: {masked_data1.fill_value}")# 计算有效数据的平均值
mean_value = masked_data1.mean()
print(f"有效数据的平均值: {mean_value}")

2.17.2 运算传播规则

处理 masked_array 时,运算会根据掩码数组的规则传播。例如,如果两个 masked_array 相加,任何一个操作数的无效元素都会导致结果中对应位置的元素也无效。

  • 基本运算传播:加法、减法等基本运算的传播规则。
  • 高级运算传播:统计运算、逻辑运算等高级运算的传播规则。
运算传播规则
基本运算传播
加法
减法
乘法
高级运算传播
统计运算
逻辑运算
自定义运算
2.17.2.1 基本运算传播

加法、减法等基本运算的传播规则如下:

# 创建两个掩码数组
data1 = np.array([1, 2, 3, 4, 5])
mask1 = np.array([False, True, False, True, False])
masked_data1 = ma.array(data1, mask=mask1)data2 = np.array([5, 4, 3, 2, 1])
mask2 = np.array([False, False, True, True, False])
masked_data2 = ma.array(data2, mask=mask2)# 基本运算
add_result = masked_data1 + masked_data2
print(f"加法结果: {add_result}")sub_result = masked_data1 - masked_data2
print(f"减法结果: {sub_result}")mul_result = masked_data1 * masked_data2
print(f"乘法结果: {mul_result}")
2.17.2.2 高级运算传播

统计运算、逻辑运算等高级运算的传播规则如下:

# 统计运算
mean_result = ma.mean([masked_data1, masked_data2])
print(f"平均值结果: {mean_result}")std_result = ma.std([masked_data1, masked_data2])
print(f"标准差结果: {std_result}")# 逻辑运算
and_result = ma.logical_and(masked_data1, masked_data2)
print(f"逻辑与结果: {and_result}")or_result = ma.logical_or(masked_data1, masked_data2)
print(f"逻辑或结果: {or_result}")# 自定义运算
def custom_operation(a, b):return ma.where(a > b, a, b)custom_result = custom_operation(masked_data1, masked_data2)
print(f"自定义运算结果: {custom_result}")

2.17.3 与 Pandas NA 的对比

Pandas 也提供了处理缺失值的方法,但与 masked_array 有所不同。了解它们之间的对比可以帮助我们选择合适的数据处理工具。

  • Pandas NA 的基本用法:如何使用 Pandas 的 NA 处理缺失值。
  • 性能对比masked_array 和 Pandas NA 的性能对比。
  • 适用场景:根据不同的需求选择合适的方法。
与 Pandas NA 的对比
基本用法
创建包含 NA 的 DataFrame
访问和操作缺失值
性能对比
基本运算性能
统计运算性能
适用场景
大规模数据处理
小规模数据处理
2.17.3.1 Pandas NA 的基本用法

Pandas 使用 NaN 来表示缺失值。

import pandas as pd# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5],'B': [5, 4, 3, np.nan, 1]
})print(f"包含缺失值的 DataFrame: \n{df}")# 访问和操作缺失值
missing_mask = df.isna()
print(f"缺失值掩码: \n{missing_mask}")df_cleaned = df.dropna()
print(f"删除缺失值后的 DataFrame: \n{df_cleaned}")
2.17.3.2 性能对比

通过对比 masked_array 和 Pandas NA 的性能,可以了解它们在不同场景下的优劣。

# 生成大规模数据
size = 10000000
data1 = np.random.uniform(0, 100, size)
mask1 = np.random.choice([True, False], size, p=[0.05, 0.95])  # 5% 的数据为无效
masked_data1 = ma.array(data1, mask=mask1)df_data1 = pd.Series(data1)
df_data1[df_data1[mask1]] = np.nan# 基本运算性能对比
start_time = time.time()
result_ma = masked_data1 + masked_data1
ma_time = time.time() - start_time
print(f"masked_array 基本运算用时: {ma_time:.2f}秒")start_time = time.time()
result_pandas = df_data1 + df_data1
pandas_time = time.time() - start_time
print(f"Pandas NA 基本运算用时: {pandas_time:.2f}秒")# 统计运算性能对比
start_time = time.time()
mean_ma = ma.mean(masked_data1)
ma_time = time.time() - start_time
print(f"masked_array 统计运算用时: {ma_time:.2f}秒")start_time = time.time()
mean_pandas = df_data1.mean()
pandas_time = time.time() - start_time
print(f"Pandas NA 统计运算用时: {pandas_time:.2f}秒")# 性能损耗分析
if ma_time < pandas_time:print("masked_array 性能更好")
else:print("Pandas NA 性能更好")
2.17.3.3 适用场景
  • 大规模数据处理masked_array 在处理大规模数据时性能更优。
  • 小规模数据处理: Pandas NA 在处理小规模数据时更简洁方便。

2.17.4 气象数据清洗案例

气象数据通常包含大量的缺失值。通过一个具体的气象数据清洗案例,展示如何使用 masked_array 高效处理缺失值。

  • 读取气象数据:如何读取和解析气象数据文件。
  • 标记缺失值:如何使用 masked_array 标记和处理缺失值。
  • 数据清洗:如何清洗和补全缺失值。
气象数据清洗案例
读取气象数据
文件格式
示例代码
标记缺失值
使用 masked_array
示例代码
数据清洗
补全缺失值
示例代码
2.17.4.1 读取气象数据

气象数据文件通常为 CSV 格式,包含多个字段,如日期、温度、湿度等。

import pandas as pd# 读取气象数据
df = pd.read_csv('weather_data.csv')
print(f"原始气象数据: \n{df.head()}")
2.17.4.2 标记缺失值

使用 masked_array 标记气象数据中的缺失值。

# 将 DataFrame 转换为结构化数组
weather_dtype = np.dtype([('date', 'U10'), ('temperature', 'f4'), ('humidity', 'f4')])
weather_data = df.to_records(index=False, convert_datetime64=True)# 创建掩码数组
temperature_mask = np.isnan(weather_data['temperature'])
humidity_mask = np.isnan(weather_data['humidity'])masked_weather_data = ma.array(weather_data, mask={'temperature': temperature_mask, 'humidity': humidity_mask})
print(f"标记缺失值后的气象数据: \n{masked_weather_data}")
2.17.4.3 数据清洗

通过插值法等方法补全缺失值。

# 使用插值法补全温度和湿度的缺失值
def interpolate_masked_data(data, field):valid_indices = np.where(~data[field].mask)[0]valid_values = data[field][~data[field].mask]invalid_indices = np.where(data[field].mask)[0]interpolated_values = np.interp(invalid_indices, valid_indices, valid_values)data[field][invalid_indices] = interpolated_valuesreturn datainterpolated_weather_data = interpolate_masked_data(masked_weather_data, 'temperature')
interpolated_weather_data = interpolate_masked_data(interpolated_weather_data, 'humidity')
print(f"清洗后的气象数据: \n{interpolated_weather_data}")

2.17.5 性能损耗分析

使用 masked_array 处理缺失值时,可能会有一些性能损耗。通过对比不同方法的性能,可以更好地理解这些损耗。

  • 内存占用:分析 masked_array 和非掩码数组的内存占用。
  • 运算速度:分析 masked_array 和非掩码数组的运算速度。
性能损耗分析
内存占用
分析方法
示例代码
运算速度
分析方法
示例代码
2.17.5.1 内存占用

masked_array 会额外占用内存来存储掩码数组。

# 计算内存占用
data = np.random.uniform(0, 100, (1000000, 3))
masked_data = ma.array(data, mask=np.random.choice([True, False], data.shape, p=[0.05, 0.95]))print(f"普通数组内存占用: {data.nbytes / (1024 * 1024):.2f} MB")
print(f"掩码数组内存占用: {masked_data.nbytes / (1024 * 1024):.2f} MB")
2.17.5.2 运算速度

masked_array 的运算速度可能会受到掩码数组的影响。

# 计算运算速度
import time# 普通数组的运算
start_time = time.time()
result = data + data
time_used = time.time() - start_time
print(f"普通数组运算用时: {time_used:.2f}秒")# 掩码数组的运算
start_time = time.time()
result_masked = masked_data + masked_data
time_used_masked = time.time() - start_time
print(f"掩码数组运算用时: {time_used_masked:.2f}秒")# 性能损耗
speed_loss = (time_used_masked - time_used) / time_used * 100
print(f"性能损耗: {speed_loss:.2f}%")

2.17.6 最佳实践与注意事项

在使用 masked_array 时,遵循以下最佳实践和注意事项可以确保代码的高效性和稳定性。

  • 合理设置掩码:根据数据特性设置掩码。
  • 避免频繁修改掩码:频繁修改掩码可能会导致性能下降。
  • 使用内存映射:使用 memmap 可以处理大规模数据。
  • 错误处理:如何处理常见的错误和异常情况。
最佳实践与注意事项
合理设置掩码
避免频繁修改掩码
使用内存映射
错误处理
空值处理
数据溢出
2.17.6.1 合理设置掩码

根据数据特性设置掩码,可以提高数据处理的效率。

# 合理设置掩码
data = np.array([1, 2, 3, 4, 5])
mask = (data < 3) | (data > 4)  # 小于 3 或大于 4 的位置标记为无效
masked_data = ma.array(data, mask=mask)print(f"合理设置掩码后的数组: {masked_data}")
2.17.6.2 避免频繁修改掩码

频繁修改掩码可能会导致性能下降,尽量在初始化时设置好掩码。

# 避免频繁修改掩码
data = np.array([1, 2, 3, 4, 5])
mask = np.array([False, True, False, True, False])
masked_data = ma.array(data, mask=mask)# 修改掩码
masked_data.mask = np.array([True, False, True, False, True])  # 频繁修改掩码
2.17.6.3 使用内存映射

处理大规模数据时,使用 memmap 可以显著提高性能。

# 使用 memmap
filename = 'large_weather_data.npy'
size = 100 * 1024 * 1024 * 1024  # 100GB
shape = (size // 100,)  # 假设每个记录是 100 字节# 定义气象数据的复合数据类型
weather_dtype = np.dtype([('date', 'U10'), ('temperature', 'f4'), ('humidity', 'f4')])# 创建一个包含 100GB 数据的内存映射数组
mmapped_data = np.memmap(filename, dtype=weather_dtype, mode='w+', shape=shape)# 填充一些示例数据
np.random.seed(42)
mmapped_data['date'] = np.array([f'date{i}' for i in range(shape[0])])
mmapped_data['temperature'] = np.random.uniform(0, 100, shape[0])
mmapped_data['humidity'] = np.random.uniform(0, 100, shape[0])# 读取并创建掩码数组
temperature_mask = np.isnan(mmapped_data['temperature'])
humidity_mask = np.isnan(mmapped_data['humidity'])masked_mmapped_data = ma.array(mmapped_data, mask={'temperature': temperature_mask, 'humidity': humidity_mask})print(f"内存映射数组: {mmapped_data[:10]}")
print(f"掩码数组: {masked_mmapped_data[:10]}")
2.17.6.4 错误处理

处理 masked_array 时,常见的错误和异常情况包括空值处理和数据溢出。

2.17.6.4.1 空值处理

确保在缺失值处理时不会出现空值。

# 空值处理
data = np.array([1, 2, 3, 4, 5])
mask = np.array([False, True, False, True, False])
masked_data = ma.array(data, mask=mask)# 计算平均值
mean_value = masked_data.mean()
print(f"有效数据的平均值: {mean_value}")# 如果所有数据都无效
masked_data.mask = True  # 所有数据无效
try:mean_value = masked_data.mean()
except ma.core.MeanOfMaskedArrayError:print("所有数据都无效,无法计算平均值")
2.17.6.4.2 数据溢出

处理大规模数据时,需要注意数据溢出问题。

# 数据溢出处理
data = np.array([1e308, 2e308, 3e308, 4e308, 5e308])
mask = np.array([False, True, False, True, False])
masked_data = ma.array(data, mask=mask)# 计算平均值
mean_value = masked_data.mean()
print(f"有效数据的平均值: {mean_value}")# 处理数据溢出
data = np.array([1e308, 2e308, 3e308, 4e308, 5e308], dtype=np.float64)
mask = np.array([False, True, False, True, False])
masked_data = ma.array(data, mask=mask)try:mean_value = masked_data.mean()print(f"有效数据的平均值: {mean_value}")
except OverflowError:print("数据溢出,无法计算平均值")

2.17.7 总结

  • 掩码数组的原理:介绍了 masked_array 的基本概念和创建方法。
  • 运算传播规则:详细解释了 masked_array 在基本运算和高级运算中的传播规则。
  • 与 Pandas NA 的对比:从基本用法、性能对比和适用场景三个方面进行了对比。
  • 气象数据清洗案例:通过一个具体的气象数据清洗案例,展示了 masked_array 在实际应用中的使用方法。
  • 性能损耗分析:分析了 masked_array 在内存占用和运算速度上的性能损耗。
  • 最佳实践与注意事项:提供了在使用 masked_array 时的几点最佳实践和注意事项。

通过本文的介绍,相信你已经对 masked_array 有了更深入的了解,并能够在实际项目中灵活运用它来处理缺失值问题。接下来,我们可以通过更多的实际案例和高级技巧,进一步提升你在数据处理方面的技能。

2.17.8 参考文献

参考资料名称链接
NumPy 官方文档NumPy Documentation
Python 数据科学手册Python Data Science Handbook
NumPy 掩码数组教程NumPy Masked Arrays Tutorial
Pandas 官方文档Pandas Documentation
Pandas 缺失值处理Handling Missing Data in Pandas
气象数据处理Processing Weather Data with Python
Python 性能调优Python Performance Optimization
内存映射文件Memory-Mapped Files in Python
NumPy 掩码数组性能分析Performance Analysis of NumPy Masked Arrays
数据清洗最佳实践Best Practices for Data Cleaning in Python

这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。

相关文章:

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.17 掩码数组:缺失值处理的优雅方案

2.17 掩码数组&#xff1a;缺失值处理的优雅方案 目录 #mermaid-svg-12vjJJbyudPnkYBO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-12vjJJbyudPnkYBO .error-icon{fill:#552222;}#mermaid-svg-12vjJJbyudPnkYBO…...

PHP 常用函数2025.02

PHP implode() 函数 语法 implode(separator,array) 参数描述separator可选。规定数组元素之间放置的内容。默认是 ""&#xff08;空字符串&#xff09;。array必需。要组合为字符串的数组。 技术细节 返回值&#xff1a;返回一个由数组元素组合成的字符串。PHP 版…...

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()...

【C++】继承(下)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的继承&#xff08;下&#xff09;&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继…...

C语言实现字符串排序:从代码到原理深度解析

在编程的世界里&#xff0c;字符串处理是一项基础且重要的技能。今天&#xff0c;我们通过分析一段C语言代码来深入了解如何对字符串进行排序。 一、代码呈现 #include <stdio.h> #include <string.h> int main() { char s[1001]; scanf("%s", s); int…...

Vue3的el-table-column下拉输入实时查询API数据选择的实现方法

由于本人对el-table-column有下拉输入选择的要求&#xff0c;根据网上搜索的资料及本人优化&#xff0c;推出我比较满意的方法&#xff0c;供各位读者参考使用。 效果图 el-table-column写法 <el-table-columnlabel"货品编号"align"center"prop"…...

【数据结构】_链表经典算法OJ:复杂链表的复制

目录 1. 题目链接及描述 2. 解题思路 3. 程序 1. 题目链接及描述 题目链接&#xff1a;138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;…...

Vue 图片引用方式详解:静态资源与动态路径访问

目录 前言1. 引用 public/ 目录2. assets/ 目录3. 远程服务器4. Vue Router 动态访问5. 总结6. 扩展&#xff08;图片不显示&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Vue 开发中&#x…...

chatGPT写的网页版贪吃蛇小游戏

chatGPT写的网页版贪吃蛇小游戏 前言网页版贪吃蛇小游戏 前言 之前无聊&#xff0c;让ChatGPT写了一段基于html语言的贪吃蛇小游戏代码 网页版贪吃蛇小游戏 将以下内容复制到记事本&#xff0c;重命名为xxx.html即可打开浏览器游玩 这里是一个使用HTML、CSS和JavaScript编写…...

Python量化交易助手:xtquant的安装与应用

Python量化交易助手&#xff1a;xtquant的安装与应用 技术背景和应用场景 在量化交易领域&#xff0c;Python因其强大的库支持和灵活性成为了许多开发者的首选语言。其中&#xff0c;xtquant 是迅投官方开发的一个Python包&#xff0c;专门用于与miniqmt通信&#xff0c;实现…...

前缀和算法

文章目录 算法总览题目1371.每个元音包含偶数次的最长子字符串 算法总览 题目 1371.每个元音包含偶数次的最长子字符串 1371.每个元音包含偶数次的最长子字符串 参考博主的讲解 思路分析&#xff1a;就是得使用前缀和记录情况&#xff0c;dp[i][j]表示s[0] 到s[i] 中&…...

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1&#xff0c;录入用户信息1.4 例子2&#xff0c;正则验证手机号1.5 例子3&#xff0c;验证输入的密码1.6 例子4&#xff0c;显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1&#xff0c;获取输入框的内容2.4 例…...

《最小阻力之路》关于愿景的理解和思考

一、愿景的形成机制 1. 愿景的三层来源 来源层级形成机制案例潜在偏差风险① 本能冲动层对快感/痛苦的即时反应"想暴富"源于缺钱焦虑易被短期情绪劫持② 社会镜像层内化外界标准&#xff08;家庭/社会/文化&#xff09;"必须考研"因家人期待混淆他人需求…...

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群 简介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群 1 环境准备1.1 集群IP规划1.2 初始化步骤&#xff08;各个节点都需执行&#xff09;1.2.1 主机名与IP地址解析1.…...

虚幻基础17:动画层接口

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 animation layer interface animation layer interface 动画层接口&#xff1a;动画图表的集。仅有名字。 添加到动画蓝图中&#xff0c;由动画蓝图实现动画图表。...

无人机PX4飞控 | PX4源码添加自定义uORB消息并保存到日志

PX4源码添加自定义uORB消息并保存到日志 0 前言 PX4的内部通信机制主要依赖于uORB&#xff08;Micro Object Request Broker&#xff09;&#xff0c;这是一种跨进程的通信机制&#xff0c;一种轻量级的中间件&#xff0c;用于在PX4飞控系统的各个模块之间进行高效的数据交换…...

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画&#xff0c;通过 CSS 技术实现了雪花的下落和消失效果&#xff0c;为页面添加了视觉吸引力和动态感。 大家复制代码时&#xff0c;可能会因格式转换出现错乱&#xff0c;导致样式失效。建议先少量复制代码进行测试&#xff0c;若未能…...

如何处理 Typecho Joe 主题被抄袭或盗版的问题

在开源社区中&#xff0c;版权保护是一个非常重要的话题。如果你发现自己的主题&#xff08;如 Joe 主题&#xff09;被其他主题&#xff08;如子比主题&#xff09;抄袭或盗版&#xff0c;你可以采取以下措施来维护自己的权益。 一、确认侵权行为 在采取任何行动之前&#xf…...

利用Vue和javascript分别编写一个“Hello World”的定时更新

目录 一、利用Vue编写一个“Hello World”的定时更新&#xff08;1&#xff09;vue编码在Html文件中&#xff08;2&#xff09;vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 &#xff08;1&#xff…...

volatile变量需要减少读取次数吗

问题说明 本人在前期读Netty源码时看到这样一段源码和注释&#xff1a; private boolean invokeHandler() {// Store in local variable to reduce volatile reads.int handlerState this.handlerState;return handlerState ADD_COMPLETE || (!ordered && handlerS…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...