岫岩网站建设/发广告平台有哪些免费
2.17 掩码数组:缺失值处理的优雅方案
目录
2.17.1 masked_array 原理
NumPy 的 masked_array
是处理缺失值的一种优雅方案。它通过在一个数据数组上添加一个布尔掩码数组,来标记哪些元素是缺失的。
- 掩码数组的基本概念:什么是掩码数组,为什么需要它。
- 创建掩码数组:如何创建和初始化
masked_array
。 - 掩码数组的属性: understanding the attributes of a
masked_array
.
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 的性能对比。 - 适用场景:根据不同的需求选择合适的方法。
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
标记和处理缺失值。 - 数据清洗:如何清洗和补全缺失值。
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 掩码数组:缺失值处理的优雅方案 目录 #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可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。array必需。要组合为字符串的数组。 技术细节 返回值:返回一个由数组元素组合成的字符串。PHP 版…...

react中如何获取dom元素
实现代码 const inputRef useRef(null) inputRef.current.focus()...

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

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

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

【数据结构】_链表经典算法OJ:复杂链表的复制
目录 1. 题目链接及描述 2. 解题思路 3. 程序 1. 题目链接及描述 题目链接:138. 随机链表的复制 - 力扣(LeetCode) 题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,…...

Vue 图片引用方式详解:静态资源与动态路径访问
目录 前言1. 引用 public/ 目录2. assets/ 目录3. 远程服务器4. Vue Router 动态访问5. 总结6. 扩展(图片不显示) 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 在 Vue 开发中&#x…...

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

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

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

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

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

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 初始化步骤(各个节点都需执行)1.2.1 主机名与IP地址解析1.…...

虚幻基础17:动画层接口
能帮到你的话,就给个赞吧 😘 文章目录 animation layer interface animation layer interface 动画层接口:动画图表的集。仅有名字。 添加到动画蓝图中,由动画蓝图实现动画图表。...

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

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

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

利用Vue和javascript分别编写一个“Hello World”的定时更新
目录 一、利用Vue编写一个“Hello World”的定时更新(1)vue编码在Html文件中(2)vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 (1ÿ…...

volatile变量需要减少读取次数吗
问题说明 本人在前期读Netty源码时看到这样一段源码和注释: private boolean invokeHandler() {// Store in local variable to reduce volatile reads.int handlerState this.handlerState;return handlerState ADD_COMPLETE || (!ordered && handlerS…...

bootstrap.yml文件未自动加载问题解决方案
在添加bootstrap.yml文件后,程序未自动扫描到,即图标是这样的: 查了一些资料,是缺少bootstrap相关依赖,虽然已经添加了spring-cloud-context依赖,但是这个依赖并未引入bootstrap依赖,可能是版本问题,需要手动引入 <dependency><groupId>org.springframework.cloud&…...

编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider
系列文章: 编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客 编程AI深度实战:自己的AI,必会LangChain-CSDN博客 编程AI深度实战:给vim装上AI-CSDN博客 编程AI深度实战:火的编程AI,都在用语法树(AST)-CSDN博客 编程AI深度实战:让verilog不再是 AI …...

前端知识速记--CSS篇:display
前端知识速记–CSS篇:display 一、什么是 display 属性? display 属性用于指定一个元素如何被显示在网页上。它不仅影响元素的显示形式,还对元素的布局、结构以及与其他元素之间的关系产生重要影响。 二、常用 display 属性值 1. block …...

51单片机 01 LED
一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC;如果没有找到hex文件(在objects文件夹下),在keil中options for target-output- 勾选 create hex file。 如果要修改编程 :重新编译-下载/编程-单片机重…...

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果
WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果 前言一、WPF 动画基础概念1.1 什么是 WPF 动画1.2 动画的基本类型1.3 动画的核心元素 二、线性动画详解2.1 DoubleAnimation 的使用2.2 ColorAnimation 实现颜色渐变 三、关键帧动画深入3.1 DoubleAnimationUsin…...

分页按钮功能
前言 在前端开发中,分页功能是一个常见的需求,特别是当需要展示大量数据时,它能有效提升用户体验。该文章结合运用了HTML,CSS,JS实现网页的分页按钮功能,并且可以选择每页显示的条数试试更新总页数及显示当…...

数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)
一、前提 二、模型评估 1.改造⑥ 2.Cross Validation算子说明 2.1Cross Validation 的作用 2.1.1 模型评估 2.1.2 减少过拟合 2.1.3 数据利用 2.2 Cross Validation 的工作原理 2.2.1 数据分割 2.2.2 迭代训练与测试 2.2.3 结果汇总 …...

集合通讯概览
集合通信概览 (1)通信的算法 是根据通讯的链路组成的 (2)因为通信链路 跟硬件强相关,所以每个CCL的库都不一样 芯片与芯片、不同U之间是怎么通信的 多卡训练:多维并行(xxx并行在上一期已经讲述…...

【FreeRTOS 教程 八】直达任务通知
目录 一、FreeRTOS 直达任务通知: (1)直达任务通知基本介绍: (2)更新目标通知的值: (3)性能优势和使用限制: 二、直达任务通知 API: &#…...

Ubuntu 18.04安装Emacs 26.2问题解决
个人博客地址:Ubuntu 18.04安装Emacs 26.2问题解决 | 一张假钞的真实世界 no X development libraries were found checking for X... no checking for X... true configure: error: You seem to be running X, but no X development libraries were found. You …...