运用数组和矩阵对数据进行存取和运算——NumPy模块 之五
目录
NumPy模块介绍
3.5.1 NumPy 操纵数组元素的逻辑
3.5.2 添加数组元素操作
1. append() 函数
2. insert() 函数
3.5.3 删除数组元素的操作
delete() 函数
3.5.4 数组元素缺失情况的处理
isnan() 函数
3.5.5 处理数组中元素重复情况
unique() 函数
3.5.6 拼接数组操作
1. concatenate() 函数
2. hstack() 函数和 vstack() 函数
3.5.7 拆分数组操作
1. split() 函数
2. hsplit() 函数和 vsplit() 函数
3.5.8 知识点总结与课程回顾
3.5.9 课后练习题
NumPy模块介绍
NumPy 是 Python 科学计算领域的重要基石,与当前 “躺吃旅行” 话题看似不相关,但在数据处理分析上意义重大。我将从它的核心功能、应用场景和优势等方面展开介绍。
NumPy(Numerical Python)是 Python 语言中用于科学计算的基础库,它提供了高性能的多维数组对象以及大量用于对数组进行操作的函数,是数据科学、机器学习、人工智能等领域不可或缺的工具。NumPy 的核心数据结构是ndarray(多维数组),这种数组允许在内存中以连续的方式存储同类型的数据,相较于 Python 原生列表,它在存储和运算效率上有着显著提升。通过 NumPy,用户可以轻松实现数组的创建、索引、切片、变形,以及各种数学运算,如矩阵乘法、统计计算、傅里叶变换等。
在实际应用中,NumPy 广泛应用于数据分析、机器学习算法的底层实现、图像和信号处理等领域。例如,在机器学习中,数据集通常会被加载并转换为 NumPy 数组进行预处理和模型训练;在图像处理中,图像数据也会被表示为多维数组,借助 NumPy 提供的函数完成图像的滤波、变换等操作。此外,NumPy 还与众多科学计算库紧密集成,如 SciPy、Pandas 等,共同构建起强大的 Python 科学计算生态,极大地提升了数据处理和分析的效率。
本期课程,我将从概念、逻辑、实操、应用4各层面阐释我对这个模块的理解,希望为喜欢Python的学习者提供一个内容详实、逻辑清晰、容易上手的课程。
3.5.1 NumPy 操纵数组元素的逻辑
NumPy 是 Python 中用于科学计算的基础库,其核心是多维数组对象(ndarray)。NumPy 数组操作高效的背后逻辑主要有以下几点:
1. 同质数据类型:NumPy 数组中的元素必须是相同的数据类型(如整数、浮点数等),这使得 NumPy 可以更高效地存储和操作数据。
2. 连续内存块:NumPy 数组在内存中是连续存储的,这使得访问和操作元素的速度远快于 Python 列表。
3. 向量化操作:NumPy 使用向量化操作替代显式循环,大大提高了计算效率。向量化操作是指对整个数组或数组的一部分同时进行操作。
4. 底层实现:NumPy 的核心功能是用 C 语言实现的,避免了 Python 解释器的开销。
3.5.2 添加数组元素操作
1. append() 函数
功能:在数组的末尾添加值,返回一个新数组。
主要参数:
- arr:需要添加元素的数组
- values:需要添加的值,可以是单个值、列表或数组
- axis:指定沿着哪个轴添加元素,默认值为 None,表示先将数组展平
应用举例:
import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3])
print("原数组:", arr)# 在数组末尾添加一个元素
new_arr = np.append(arr, 4)
print("添加元素后的数组:", new_arr)# 在数组末尾添加多个元素
new_arr = np.append(arr, [4, 5, 6])
print("添加多个元素后的数组:", new_arr)# 创建一个二维数组
arr_2d = np.array([[1, 2], [3, 4]])
print("\n原二维数组:\n", arr_2d)# 沿轴 0 添加元素(添加行)
new_arr_2d = np.append(arr_2d, [[5, 6]], axis=0)
print("沿轴 0 添加元素后的数组:\n", new_arr_2d)# 沿轴 1 添加元素(添加列)
new_arr_2d = np.append(arr_2d, [[5], [6]], axis=1)
print("沿轴 1 添加元素后的数组:\n", new_arr_2d)
2. insert() 函数
功能:在数组的指定位置插入值,返回一个新数组。
主要参数:
- arr:需要插入元素的数组
- obj:插入点的索引位置
- values:需要插入的值
- axis:指定沿着哪个轴插入元素,默认值为 None,表示先将数组展平
应用举例:
import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3, 4])
print("原数组:", arr)# 在索引 2 处插入元素 5
new_arr = np.insert(arr, 2, 5)
print("插入元素后的数组:", new_arr)# 在索引 2 处插入多个元素
new_arr = np.insert(arr, 2, [5, 6, 7])
print("插入多个元素后的数组:", new_arr)# 创建一个二维数组
arr_2d = np.array([[1, 2], [3, 4]])
print("\n原二维数组:\n", arr_2d)# 沿轴 0 在索引 1 处插入一行
new_arr_2d = np.insert(arr_2d, 1, [5, 6], axis=0)
print("沿轴 0 插入元素后的数组:\n", new_arr_2d)# 沿轴 1 在索引 1 处插入一列
new_arr_2d = np.insert(arr_2d, 1, [5, 6], axis=1)
print("沿轴 1 插入元素后的数组:\n", new_arr_2d)
3.5.3 删除数组元素的操作
delete() 函数
功能:删除数组中指定位置的元素,返回一个新数组。
主要参数:
- arr:需要删除元素的数组
- obj:要删除的元素的索引位置或索引数组
- axis:指定沿着哪个轴删除元素,默认值为 None,表示先将数组展平
应用举例:
import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])
print("原数组:", arr)# 删除索引 2 处的元素
new_arr = np.delete(arr, 2)
print("删除元素后的数组:", new_arr)# 删除多个索引处的元素
new_arr = np.delete(arr, [0, 2, 4])
print("删除多个元素后的数组:", new_arr)# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("\n原二维数组:\n", arr_2d)# 沿轴 0 删除索引 1 处的行
new_arr_2d = np.delete(arr_2d, 1, axis=0)
print("沿轴 0 删除元素后的数组:\n", new_arr_2d)# 沿轴 1 删除索引 1 处的列
new_arr_2d = np.delete(arr_2d, 1, axis=1)
print("沿轴 1 删除元素后的数组:\n", new_arr_2d)
3.5.4 数组元素缺失情况的处理
isnan() 函数
功能:检测数组中的元素是否为 NaN(Not a Number),返回一个布尔数组。
应用举例:
import numpy as np# 创建一个包含 NaN 的数组
arr = np.array([1, np.nan, 3, np.nan, 5])
print("原数组:", arr)# 检测数组中的 NaN
nan_mask = np.isnan(arr)
print("NaN 掩码:", nan_mask)# 使用掩码替换 NaN 为 0
arr[nan_mask] = 0
print("替换后的数组:", arr)# 在二维数组中使用
arr_2d = np.array([[1, np.nan, 3], [4, 5, np.nan], [7, 8, 9]])
print("\n原二维数组:\n", arr_2d)# 检测二维数组中的 NaN
nan_mask_2d = np.isnan(arr_2d)
print("二维数组的 NaN 掩码:\n", nan_mask_2d)# 替换二维数组中的 NaN 为 0
arr_2d[nan_mask_2d] = 0
print("替换后的二维数组:\n", arr_2d)
3.5.5 处理数组中元素重复情况
unique() 函数
功能:找出数组中的唯一元素,并返回排序后的结果。
应用举例:
import numpy as np# 创建一个包含重复元素的一维数组
arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
print("原数组:", arr)# 找出唯一元素
unique_arr = np.unique(arr)
print("唯一元素:", unique_arr)# 返回唯一元素及其出现次数
unique_arr, counts = np.unique(arr, return_counts=True)
print("唯一元素:", unique_arr)
print("出现次数:", counts)# 在二维数组中使用
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [1, 2, 3]])
print("\n原二维数组:\n", arr_2d)# 找出二维数组的唯一元素
unique_elements = np.unique(arr_2d)
print("二维数组的唯一元素:", unique_elements)# 按行找出唯一的行
unique_rows = np.unique(arr_2d, axis=0)
print("二维数组的唯一行:\n", unique_rows)
3.5.6 拼接数组操作
1. concatenate() 函数
功能:沿指定轴连接多个数组,返回一个新数组。
主要参数:
- arrays:需要连接的数组序列,可以是列表或元组
- axis:指定沿着哪个轴连接数组,默认值为 0
应用举例:
import numpy as np# 创建两个一维数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("原一维数组 1:", arr1)
print("原一维数组 2:", arr2)# 连接两个一维数组
concatenated_arr = np.concatenate((arr1, arr2))
print("连接后的一维数组:", concatenated_arr)# 创建两个二维数组
arr1_2d = np.array([[1, 2], [3, 4]])
arr2_2d = np.array([[5, 6], [7, 8]])
print("\n原二维数组 1:\n", arr1_2d)
print("原二维数组 2:\n", arr2_2d)# 沿轴 0 连接二维数组(垂直堆叠)
concatenated_arr_2d_axis0 = np.concatenate((arr1_2d, arr2_2d), axis=0)
print("沿轴 0 连接后的二维数组:\n", concatenated_arr_2d_axis0)# 沿轴 1 连接二维数组(水平堆叠)
concatenated_arr_2d_axis1 = np.concatenate((arr1_2d, arr2_2d), axis=1)
print("沿轴 1 连接后的二维数组:\n", concatenated_arr_2d_axis1)
2. hstack() 函数和 vstack() 函数
功能:
- hstack():水平堆叠数组(沿轴 1)
- vstack():垂直堆叠数组(沿轴 0)
应用举例:
import numpy as np# 创建两个一维数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print("原一维数组 1:", arr1)
print("原一维数组 2:", arr2)# 水平堆叠一维数组
hstacked_arr = np.hstack((arr1, arr2))
print("水平堆叠后的一维数组:", hstacked_arr)# 垂直堆叠一维数组(需要将一维数组转换为二维数组)
vstacked_arr = np.vstack((arr1, arr2))
print("垂直堆叠后的二维数组:\n", vstacked_arr)# 创建两个二维数组
arr1_2d = np.array([[1, 2], [3, 4]])
arr2_2d = np.array([[5, 6], [7, 8]])
print("\n原二维数组 1:\n", arr1_2d)
print("原二维数组 2:\n", arr2_2d)# 水平堆叠二维数组
hstacked_arr_2d = np.hstack((arr1_2d, arr2_2d))
print("水平堆叠后的二维数组:\n", hstacked_arr_2d)# 垂直堆叠二维数组
vstacked_arr_2d = np.vstack((arr1_2d, arr2_2d))
print("垂直堆叠后的二维数组:\n", vstacked_arr_2d)
3.5.7 拆分数组操作
1. split() 函数
功能:将数组沿指定轴拆分为多个子数组。
主要参数:
- ary:需要拆分的数组
- indices_or_sections:指定拆分位置的整数或数组
- axis:指定沿着哪个轴拆分,默认值为 0
应用举例:
import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5, 6])
print("原一维数组:", arr)# 将一维数组平均拆分为 3 个子数组
sub_arrays = np.split(arr, 3)
print("拆分后的子数组:", sub_arrays)# 指定拆分位置
sub_arrays = np.split(arr, [2, 4])
print("按指定位置拆分后的子数组:", sub_arrays)# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print("\n原二维数组:\n", arr_2d)# 沿轴 0 平均拆分为 2 个子数组
sub_arrays_axis0 = np.split(arr_2d, 2, axis=0)
print("沿轴 0 拆分后的子数组:")
for sub_arr in sub_arrays_axis0:print(sub_arr)# 沿轴 1 拆分为 3 个子数组
sub_arrays_axis1 = np.split(arr_2d, 3, axis=1)
print("沿轴 1 拆分后的子数组:")
for sub_arr in sub_arrays_axis1:print(sub_arr)
2. hsplit() 函数和 vsplit() 函数
功能:
- hsplit():水平拆分数组(沿轴 1)
- vsplit():垂直拆分数组(沿轴 0)
应用举例:
import numpy as np# 创建一个二维数组
arr_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print("原二维数组:\n", arr_2d)# 水平拆分为 2 个子数组
h_split_arrays = np.hsplit(arr_2d, 2)
print("水平拆分后的子数组:")
for sub_arr in h_split_arrays:print(sub_arr)# 垂直拆分为 3 个子数组
v_split_arrays = np.vsplit(arr_2d, 3)
print("垂直拆分后的子数组:")
for sub_arr in v_split_arrays:print(sub_arr)
3.5.8 知识点总结与课程回顾
重点内容
- NumPy 数组操作高效的原因:同质数据类型、连续内存块、向量化操作和底层 C 语言实现。
- 数组元素的添加:append() 和 insert() 函数的使用。
- 数组元素的删除:delete() 函数的使用。
- 处理缺失值:isnan() 函数的使用。
- 处理重复值:unique() 函数的使用。
- 数组的拼接:concatenate()、hstack() 和 vstack() 函数的使用。
- 数组的拆分:split()、hsplit() 和 vsplit() 函数的使用。
难点内容
- 理解 NumPy 数组在内存中的存储方式和操作逻辑。
- 正确使用 axis 参数进行多维数组的操作。
- 处理复杂的数组拼接和拆分场景。
趣味案例
- 图像处理中的应用:在图像处理中,常常需要对图像数据(本质上是多维数组)进行裁剪、拼接等操作。例如,将多张图片拼接成一个大的拼贴画,或者从一张图片中裁剪出感兴趣的区域。
- 数据分析中的应用:在数据分析中,经常需要处理包含缺失值的数据。可以使用 NumPy 的 isnan() 函数检测缺失值,并进行相应的处理,如删除包含缺失值的记录或用平均值填充缺失值。
- 机器学习中的应用:在机器学习中,通常需要将数据集分为训练集和测试集。可以使用 NumPy 的数组拆分功能来实现这一目的。另外,在特征工程中,也经常需要对特征矩阵进行拼接、删除等操作。
3.5.9 课后练习题
练习题 1:创建一个形状为 (5, 5) 的二维数组,其主对角线上的元素为 1、2、3、4、5,其余元素为 0。然后在数组的右侧添加一列,该列元素全为 6。
练习题 2:创建一个包含 20 个随机整数的一维数组,范围在 1 到 100 之间。删除数组中所有小于 50 的元素,并将结果数组排序。
练习题 3:创建两个形状为 (3, 3) 的二维数组,一个数组的元素全为 1,另一个数组的元素全为 2。将这两个数组按水平方向拼接,然后将结果数组拆分为 3 个形状相同的子数组。
通过这些练习题,你可以进一步巩固对 NumPy 数组元素操作的理解和掌握。听我课的同学们不要手懒,我每节课都会准备一些趣味案例和课后练习题,大家看完这些内容,可以上手操作一下。可以将自己实操的结果放到评论中,不懂的地方也可以跟我交流,欢迎交流,老师有问必答。
相关文章:
运用数组和矩阵对数据进行存取和运算——NumPy模块 之五
目录 NumPy模块介绍 3.5.1 NumPy 操纵数组元素的逻辑 3.5.2 添加数组元素操作 1. append() 函数 2. insert() 函数 3.5.3 删除数组元素的操作 delete() 函数 3.5.4 数组元素缺失情况的处理 isnan() 函数 3.5.5 处理数组中元素重复情况 unique() 函数 3.5.6 拼接数组操作 1. con…...
AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent
开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…...
日志 Slf4j , Java 中使用
// 示例代码package biz.baijing.controller;import biz.baijing.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...
Matlab 单机无穷大系统故障
1、内容简介 Matlab 236-单机无穷大系统故障 可以交流、咨询、答疑 2、内容说明 略 摘要:短路是电力系统中最容易发生的故障,每年因短路而引发的电气事故不计其数。本文详细介绍了短路故障产生的原因以及危害等,并重点介绍了Simulink仿真工…...
Hadoop区别
Hadoop • 定义 • Hadoop是一个由Apache基金会开发的分布式计算平台。它主要包括HDFS(Hadoop Distributed File System)和MapReduce编程模型。HDFS用于存储大规模数据,它将文件分割成多个数据块(block),并…...
【软件工程】软件缺陷 基于组合的优化方法
在软件缺陷检测中,基于组合的优化方法主要通过数学和计算策略高效地探索可能的解空间,以解决测试用例生成、缺陷定位和预测等问题。以下是其关键要点和应用场景的整理: 1. 组合优化在软件缺陷检测中的应用场景 测试用例生成 组合测试…...
python opencv 将不同shape尺寸的图片制作video视频
python opencv 将不同shape尺寸的图片制作video视频。 具体代码实现如下: import os import cv2 import time import shutil def resize_img_keep_ratio(img, target_size):old_size img.shape[:2] # 原始图像大小ratio min(target_size[i] / old_size[i] for …...
Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析
在CAD建模中,构建闭合的Wire(线框)是拓扑结构生成的基础操作。OpenCascade(OCCT)作为强大的几何建模库,支持从离散的Edge(边)构建Wire,但在实际应用中,边的有序性直接影响构建的成功率。本文将详细探讨有序与无序两种场景下的实现方法,并提供完整代码示例。 一、有序…...
在IDEA中导入gitee项目
一、导入前准备工作 1、下载gitee插件 2、下载好之后就能在VCS中找到share Project on gitee。 二、导入 1、回到idea主页面 2、可以授权登录绑定gitee账号,就可以直接打开仓库。(条件是这个是要打开自己仓库里的代码) 3、也可以复制看见的…...
Edge Remover v18.7 绿色版:轻松卸载 Edge 浏览器,彻底清理残留数据
Edge Remover 是一款专门用于卸载 Microsoft Edge 浏览器及其 WebView2 运行时的工具。它能够彻底删除 Edge 浏览器及其相关组件,包括所有文件、注册表项和其他残留数据。此外,Edge Remover 还可以防止 Windows 更新自动重新安装 Edge 浏览器。 软件功能…...
深入理解 iOS 开发中的 `use_frameworks!`
在使用 CocoaPods 管理 iOS 项目依赖时,开发者经常会在 Podfile 文件中看到一个配置选项:use_frameworks!。本文将详细介绍这个配置选项的含义,以及如何决定是否在项目中使用它。 一、什么是 use_frameworks! 在 CocoaPods 中引入第三方库时…...
Vue学习百日计划-Gemini版
核心理念: 基础先行: HTML, CSS, JavaScript 是前端的基石,必须扎实。聚焦 Vue 3: 学习当前主流的 Vue 3 版本,重点掌握 Composition API。实践驱动: 每个阶段都要有项目练习,理论结合实践。生…...
不定长滑动窗口---初阶篇
目录 引言 求最长/最大 3. 无重复字符的最长子串 3090. 每个字符最多出现两次的最长子字符串 1493. 删掉一个元素以后全为 1 的最长子数组 1208. 尽可能使字符串相等 904. 水果成篮 1695. 删除子数组的最大得分 2958. 最多 K 个重复元素的最长子数组 2024. 考试的最大…...
MacOS 上构建 gem5
MacOS 中只存在 python3,但是scons 只认 python,不在 系统中创建 软连接,一个是因为比较难操作;另一个是尽量不要更改系统。所以独立构件python 和scons: 1,安装python 下载源代码: Python S…...
矩阵置零算法讲解
矩阵置零算法讲解 一、问题描述 给定一个 (m \times n) 的矩阵,如果一个元素为 (0) ,则将其所在行和列的所有元素都设为 (0) 。要求使用原地算法,即在不使用额外矩阵空间的情况下完成操作。 二、解题思路 暴力解法 最直观的想法是遍历矩阵,当遇到 (0) 元素时,直接将其…...
HAProxy + Keepalived + Nginx 高可用负载均衡系统
1. 项目背景 在现代Web应用中,高可用性和负载均衡是两个至关重要的需求。本项目旨在通过HAProxy实现流量分发,通过Keepalived实现高可用性,通过Nginx提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行&#…...
火山RTC 6 自定义视频
文档: 自定义视频采集--实时音视频-火山引擎 这个点,相关的文档 关于PC上的资料只有寥寥几句,没有代码、没有DEMO,自己琢磨了几天,没走对方向,和客服你来我往拉锯了几天加投诉下,才给了点内部…...
[Java][Leetcode middle] 121. 买卖股票的最佳时机
暴力循环 总是以最低的价格买入,以最高的价格卖出: 例如第一天买入,去找剩下n-1天的最高价格,计算利润 依次计算到n-1天买入; 比较上述利润 // 运行时间超时。 o(n^2)public int maxProfit1(int[] prices) {int profit 0;for (i…...
《数据结构初阶》【堆 + 堆排序 + TOP-K】
【堆 堆排序 TOP-K】目录 前言:什么是堆?堆的实现方式有哪些?我们要选择哪种方式进行实现? ----------------堆的实现----------------什么是向上调整算法,要怎么实现?什么是向下调整算法,要怎…...
sqlilab-Less-18
知识铺垫 User-Agent 首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。user-agent的作用。通过识别用户身份,响应合适的web界面,所以更改可以让电脑返回一个手机界…...
mapbox进阶,使用mapbox-plugins插件加载饼状图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀使用mapbox-plugins插件加载饼状图1. ☘…...
【Java继承】——面向对象编程的基石
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 【前言】 在Java面向对象编程中,继承是一个非常重要的概念。它允许我们创建一个新类&…...
【数据结构】——队列
一、队列的概念和结构 概念: 只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先 出FIFO(First In First Out)。 入队:进行数据插入的一端叫做队尾 出队:进行删除操作的一端叫做队…...
如何找出所有不重复的三位偶数:详细解法与思考过程
问题描述 给定一个包含数字(0-9)的数组digits,其中可能包含重复元素。我们需要找出所有满足以下条件且互不相同的整数: 该整数由digits中的三个元素按任意顺序依次连接组成 该整数不含前导零(即必须是100-999之间的数…...
每日Prompt:超现实交互场景
提示词 一幅铅笔素描画,描绘了 一个女孩 与 一朵玫瑰 互动的场景,其中 一朵玫瑰 以逼真的全彩风格呈现,与 一个女孩及背景的手绘素描风格形成超现实的对比。...
基于大模型预测的多发性硬化综合诊疗方案研究报告大纲
目录 一、引言二、文献综述三、大模型预测系统构建四、术前预测与手术方案制定五、术中监测与决策支持六、术后护理与并发症预测七、麻醉方案智能优化八、统计分析与技术验证九、实验验证与证据支持十、健康教育与指导系统十一、结论与展望一、引言 (一)研究背景与意义 多发…...
五、Hive表类型、分区及数据加载
在 Hive 中高效构建、管理和查询数据仓库,核心在于精准运用表类型(内部/外部)与分区策略(静态/动态/多重)。这不仅决定数据的生命周期归属,更是优化海量数据查询性能的关键手段。 一、表的身份权责&#x…...
在选择合适的实验室铁地板和铸铁试验平板,帮分析
铸铁测试底板是一种采用铸铁材料经过加工制成的基准测量工具,主要用于工业检测、机械加工和实验室等高精度要求的场合。其核心功能是为各类测量、检验、装配工作提供稳定的水平基准面,确保测量数据的准确性和一致性。 一、铸铁测试底板的基本特性 1.材质…...
阿里云人工智能大模型通义千问Qwen3开发部署
本文主要描述阿里云人工智能大模型开源社区ModelScope提供的通义千问Qwen3开发部署。 与阿里云一起 轻松实现数智化 让算力成为公共服务:用大规模的通用计算,帮助客户做从前不能做的事情,做从前做不到的规模。让数据成为生产资料:…...
网络基础知识梳理和Muduo库使用
文章目录 网络基础知识梳理和Muduo库使用1.知识储备2.阻塞、非阻塞、同步、异步我的总结 3.Unix/Linux上的五种IO模型0.铺垫1.阻塞IO(blocking)2.非阻塞IO(non-blocking)3.IO复用(IO multiplexing)4.信号驱…...
IDEA 插件推荐:提升编程效率
通过安装和使用合适的插件,可以大幅提升开发效率和代码质量。本文将从多个维度推荐实用的 IDEA 插件,并提供安装与使用指南。 一、代码辅助类插件 1. Key Promoter X —— 快捷键学习利器 功能介绍:当你使用鼠标点击某个功能时,…...
001大模型-认识大模型以及大模型应用场景
大模型是一种基于海量数据训练的人工智能系统,具备强大的语言理解和生成能力。其工作原理是通过深度学习算法,分析大量文本数据,学习语言模式和知识,从而能够处理复杂的任务。大模型的应用广泛,包括自然语言处理、机器…...
Qt进阶开发:QTcpServer的的详解
文章目录 一、QTcpServer 简介二、常用成员函数的使用三、信号函数的使用四、虚函数的使用五、连接多客户端-服务端示例一、QTcpServer 简介 QTcpServer 是 Qt 网络模块中的一个核心类,用于实现 基于 TCP 协议的服务端(Server),它负责监听端口、接收客户端连接请求,并通过…...
Spark,集群搭建之Yarn模式
以下是Spark基于Yarn模式的集群搭建关键步骤(需先部署Hadoop Yarn集群): 一、环境准备 1. 确认Hadoop已运行 - 确保HDFS、Yarn ResourceManager和NodeManager正常启动。 2. 安装Java - 所有节点安装JDK 8,配置 JAVA_HOME 环境变量…...
fiddler 配置ios手机代理调试
平时做移动移动端开必的时候经常需要抓包手机,用于接口请求跟踪,但iOS的抓包经常性的配不成功,经过踩过不少坑后终于知道了整个配置流程,此文记录Fiddler抓包iOS手机的配置流程。 Step 1:Fiddler配置 通过工具栏Tool…...
iOS即时通信的技术要点
iOS即时通信开发的关键技术要点总结: 一、通讯协议选择 Socket通信 基础实现:使用原生BSD Socket或CFNetwork框架(复杂),推荐第三方库如CocoaAsyncSocket(封装GCDAsyncSocket),简化T…...
Windows 安装 Milvus
说明 操作系统:Window 中间件:docker desktop Milvus:Milvus Standalone(单机版) 安装 docker desktop 参考:Window、CentOs、Ubuntu 安装 docker-CSDN博客 安装 Milvus 参考链接:Run Mil…...
5G网络:能源管理的“智能电网“革命,Python如何成为关键推手?
5G网络:能源管理的"智能电网"革命,Python如何成为关键推手? 大家好,我是Echo_Wish。今天咱们聊一个既硬核又接地气的话题——5G网络如何用Python代码重构全球能源管理。 不知道你们有没有注意过: • 家里装…...
解决WSL、Ubuntu的.ico图标不正确显示缩略图
解决WSL、Ubuntu的.ico图标不正确显示缩略图 问题描述 Win10系统中由于更新了某些软件,篡改了默认的图像显示软件,导致WSL等软件未能成功显示图标,表现如下: 解决方法 将ico文件的默认打开方式更改为“画图”,如下…...
Redis+Caffeine构造多级缓存
一、背景 项目中对性能要求极高,因此使用多级缓存,最终方案决定是RedisCaffeine。其中Redis作为二级缓存,Caffeine作为一级本地缓存。 二、Caffeine简单介绍 Caffeine是一款基于Java 8的高性能、灵活的本地缓存库。它提供了近乎最佳的命中…...
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是RedisCaffeine构建高性能二级缓存,废话不多说直接开始~ 目录 二级缓存架构的技术背景 1. 基础缓存架构 2. 架构演进动因 3. 二级缓存解决方案 为什么选择本地缓存? 1. 极速访问 2. 减少网络IO 3…...
【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025
UniGoal的提出了一个通用的零样本目标导航框架,能够统一处理多种类型的导航任务。 支持 对象类别导航、实例图像目标导航和文本目标导航,而无需针对特定任务进行训练或微调。 本文分享UniGoal复现和模型推理的过程~ 查找沙发,模…...
LeetCode 373 查找和最小的 K 对数字题解
LeetCode 373 查找和最小的 K 对数字题解 题目描述 给定两个以升序排列的整数数组 nums1 和 nums2,以及一个整数 k。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2。请找到和最小的 k 个数对。 解题思路 最小堆优化法…...
搜索二维矩阵 II 算法讲解
搜索二维矩阵 II 算法讲解 一、问题描述 给定一个 m x n 的二维矩阵 matrix ,需要在其中搜索一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。要求编写一个高效的算法来完成搜索任务。 二、解题思路 方法一:暴力枚举 …...
三层交换机,单臂路由(用DHCP自动配置ip+互通+ACL
三层交换机,单臂路由(用DHCP自动配置ip互通ACL 任务 1.用DHCP自动配置ip 2.三层交换机SVI、 3.单臂路由 4.互通 5.ACL三层交换机SVI 交换机 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(conf…...
OpenCV CUDA 模块中在 GPU 上对图像或矩阵进行 翻转(镜像)操作的一个函数 flip()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::flip 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上对图像或矩阵进行 翻转(镜像)操作。它类似…...
链表面试题7之相交链表
来了来了,这道题才是值得我们奇思妙想的题,链接在下面。 160. 相交链表 - 力扣(LeetCode) 看完题目一脸懵吗,没关系,我们还得看示例 还是一脸懵怎么办?? 两个链表相交的方式有几种?…...
Excel-to-JSON插件专业版功能详解:让Excel数据转换更灵活
前言 在数据处理和系统集成过程中,Excel和JSON格式的转换是一个常见需求。Excel-to-JSON插件提供了一套强大的专业版功能,能够满足各种复杂的数据转换场景。本文将详细介绍这些专业版功能的应用场景和使用方法。 订阅说明 在介绍具体功能之前…...
【C++】”如虎添翼“:模板初阶
泛型编程: C中一种使用模板来实现代码重用和类型安全的编程范式。它允许程序员编写与数据类型无关的代码,从而可以用相同的代码逻辑处理不同的数据类型。模板是泛型编程的基础 模板分为两类: 函数模板:代表了一个函数家族&#x…...
【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
参考 Pod健康检查 Kubernetes 学习笔记Kubernetes 就绪探针(Readiness Probe) - 人艰不拆_zmc - 博客园Kubernetes存活探针(Liveness Probe) - 人艰不拆_zmc - 博客园 Pod健康检查 Pod的健康状态由两类探针来检查:…...