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

NumPy 2.x 完全指南【十七】转置操作

文章目录

  • 1. 什么是转置
  • 2. 转置操作
    • 2.1 transpose
    • 2.2 ndarray.T
    • 2.3 moveaxis
    • 2.4 rollaxis
    • 2.5 permute_dims
    • 2.6 swapaxes
    • 2.7 matrix_transpose

1. 什么是转置

在线性代数中,矩阵转置是指将矩阵的行和列进行互换,即原矩阵的第 i i i 行、第 j j j 列元素,在转置后变为第 j j j 行、第 i i i 列元素。给定一个 m × n m \times n m×n 的矩阵 A A A,其转置矩阵 A T A^T AT 是一个 n × m n \times m n×m 的矩阵,满足:
( A T ) i j = A j i (A^T)_{ij} = A_{ji} (AT)ij=Aji

示例, 原矩阵 A A A
A = [ 1 2 3 4 5 6 ] ( 2 × 3 ) A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \quad (2 \times 3) A=[142536](2×3)

转置矩阵 A T A^T AT 为:
A T = [ 1 4 2 5 3 6 ] ( 3 × 2 ) A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix} \quad (3 \times 2) AT= 123456 (3×2)

具体表现为:

  • 原矩阵的第 1 行 转置矩阵的第 1 列
  • 原矩阵的第 2 行 转置矩阵的第 2 列
  • 以此类推

在高维数组中,转置的操作更加灵活,可以:

  • 完全反转所有轴的顺序(默认行为)。
  • 自定义轴的排列顺序(如指定轴的交换顺序)。

在机器学习中转置常用于:

  • 调整图像数据的通道顺序。
  • 将时间序列数据从 (序列长度, 特征数) 转为 (特征数, 序列长度)。
  • 神经网络中的权重矩阵维度匹配。
  • 卷积操作中的滤波器方向调整。

2. 转置操作

2.1 transpose

transpose()(转置):通过轴的重新排列改变数组的维度结构(默认返回视图)。

函数、方法定义:

# 函数
def transpose(a, axes=None)
# 方法
def transpose(self, axes: None | _ShapeLike, /) -> Self: ...

参数说明:

  • a:输入数组(支持任意维度)。
  • axes:指定新轴的排列顺序。

不同维度的行为说明:

数组维度默认行为(无 axes 参数)说明
1-D返回原数组的视图无实际转置操作,仍是 1D 数组,仅改变数组的 strides 属性)
2-D标准矩阵转置行列互换
n-D反转所有轴的顺序原轴顺序 (0,1,2) 变为 (2,1,0)

示例 1 ,转置二维数组:

# 二维数组
arr_2d = np.array([[1, 2, 3],[4, 5, 6]])# 转置
# 函数调用
transposed_2 = np.transpose(arr_2d)
print(transposed_2)
# 输出:
#[[1 4]
# [2 5]
# [3 6]]# 方法调用
transposed_1 = arr_2d.transpose()
print(transposed_1)

注意:转置后内存共享,修改转置后的元素会影响原数组:

# 修改转置矩阵元素
transposed_2[1, 1] = 99 # 第二行第二列修改为 5-> 99
print(arr_2d)
# 原数组被修改
# [[ 1  2  3]
#  [ 4 99  6]]

示例 2 ,三维数组:

arr_3d = np.arange(24).reshape(2, 3, 4)  # 形状 (2, 3, 4)
print(arr_3d)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
#
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]# 转置
transposed = np.transpose(arr_3d)
print(transposed.shape)  # 形状(4,3,2)
print(transposed)
# [[[ 0 12]
#   [ 4 16]
#   [ 8 20]]
#
#  [[ 1 13]
#   [ 5 17]
#   [ 9 21]]
#
#  [[ 2 14]
#   [ 6 18]
#   [10 22]]
#
#  [[ 3 15]
#   [ 7 19]
#   [11 23]]]

转置过程的核心是轴顺序的变化,每个元素的索引按新轴顺序重组,例如三维数组的转置公式为:
( A T ) i j k = n e w A k j i (A^T)_{ijk} = newA_{kji} (AT)ijk=newAkji
示例:

  • A[0,0,0] -> newA[0,0,0]
  • A[0,0,1] -> newA[1,0,0]
  • A[1,2,3] -> newA[3,2,1]
  • 依次映射所有元素

比如,案例中的三维数据,A[1,2,3] 索引即第二层第三行第四列的元素为 23 ,转置后放在 newA[3,2,1] 即第四层第三行第二列,可以看下转置后的输出,也是 23

示例 3 ,有一个形状为 (2, 3, 4) 的三维数组,轴的顺序为 (0, 1, 2) ,那么 axes 参数是包含三个整数的元组,然后可以设置不同轴顺序:

axes 参数转置后形状转置规则(原轴顺序 → 新轴顺序)示例元素映射(原位置 → 新位置)
默认(None(4, 3, 2)(0, 1, 2) → (2, 1, 0)arr[1, 2, 3] → new[3, 2, 1]
(0, 1, 2)(2, 3, 4)无变化arr[1, 0, 0] → new[1, 0, 0]
(1, 0, 2)(3, 2, 4)交换块(0轴)和行(1轴)arr[1, 2, 3] → new[2, 1, 3]
(0, 2, 1)(2, 4, 3)交换行(1轴)和列(2轴)arr[0, 1, 2] → new[0, 2, 1]
(2, 0, 1)(4, 2, 3)列→块→行arr[1, 0, 0] → new[0, 1, 0]
(2, 1, 0)(4, 3, 2)反转所有轴(等价默认)arr[0, 2, 3] → new[3, 2, 0]
(1, 2, 0)(3, 4, 2)行→列→块arr[1, 0, 0] → new[0, 0, 1]

代码示例:

arr = np.arange(24).reshape(2, 3, 4) # shape (4, 3, 2)
print(arr)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
#
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]transposed = np.transpose(arr, axes=(1, 0, 2))
print(transposed)  # shape (3, 4, 2)
# [[[ 0  1  2  3]
#   [12 13 14 15]]
# 
#  [[ 4  5  6  7]
#   [16 17 18 19]]
# 
#  [[ 8  9 10 11]
#   [20 21 22 23]]]

扩展,在计算机视觉领域,图像通常以多维数组存储,比如彩色图的两种格式:

  • HWCHeight, Width, Channels):即(高度, 宽度, 通道)
  • CHWChannels, Height, Width):即(通道, 高度, 宽度)

在模型训练和预测的过程中,往往会涉及到格式转换,比如 OpenCV 读取图像的格式为 HWCPyTorch 要求的格式是 CHW ,需要在数据内容不变的情况下,整存储顺序,适配不同框架的计算需求。

一个常用的代码片如下:

# 读取图片(HWC格式)
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 转换为 CHW 格式(使用 copy ,防止转置后的视图与原数组共享内存,避免意外的修改。)
img_chw = np.transpose(img_rgb.copy(), (2, 0, 1))

2.2 ndarray.T

NumPy 还提供了一个是一个数组对象的转置属性,即 arr.T ,等价于调用 np.transpose(arr),默认反转数组的所有轴。

示例:

arr_3d = np.arange(24).reshape(2, 3, 4)
print("原形状:", arr_3d.shape)  # (2, 3, 4)transposed_3d = arr_3d.T
print("转置后形状:", transposed_3d.shape)  # (4, 3, 2)

2.3 moveaxis

numpy.moveaxis:将指定轴移动到目标位置,其他轴按原有顺序自动排列。

函数定义:

def moveaxis(a, source, destination)

参数说明:

  • a:输入的多维数组。
  • source:要移动的轴的原始位置。
  • destination:移动后的目标位置。

注意事项:

  • transpose 函数的一个特例。
  • 返回原数组的视图
  • 支持同时移动多个轴到不同目标位置
  • 目标位置按以下规则处理:
    • 正索引:从左到右(0 开始)。
    • 负索引:从右到左(-1 表示最后一个位置)。

示例 1 ,移动 0 轴到末尾,形状由 (3,4,5) 变为 (4,5,3),元素 a[x,y,k] 依次重新排入到 a[y,k,x] 的索引位置:

x = np.arange(60).reshape(3, 4, 5)  # shape (3,4,5)
print(x)
# [[[ 0  1  2  3  4]
#   [ 5  6  7  8  9]
#   [10 11 12 13 14]
#   [15 16 17 18 19]]
#
#  [[20 21 22 23 24]
#   [25 26 27 28 29]
#   [30 31 32 33 34]
#   [35 36 37 38 39]]
#
#  [[40 41 42 43 44]
#   [45 46 47 48 49]
#   [50 51 52 53 54]
#   [55 56 57 58 59]]]
# 移动轴 0 到末尾
y = np.moveaxis(x, 0, -1)  # shape (4,5,3)
print(y)
# [[[ 0 20 40]
#   [ 1 21 41]
#   [ 2 22 42]
#   [ 3 23 43]
#   [ 4 24 44]]
#
#  [[ 5 25 45]
#   [ 6 26 46]
#   [ 7 27 47]
#   [ 8 28 48]
#   [ 9 29 49]]
#
#  [[10 30 50]
#   [11 31 51]
#   [12 32 52]
#   [13 33 53]
#   [14 34 54]]
#
#  [[15 35 55]
#   [16 36 56]
#   [17 37 57]
#   [18 38 58]
#   [19 39 59]]]

同时移动多个轴时,原位置和目标位置都是数组,且需要保持依次对应关系。示例 2 ,同时移动轴 0 和轴 1 到新位置,即 0 移动到末尾,1 移动到倒数第二位置:

x = np.arange(60).reshape(3, 4, 5)  # shape (3,4,5)
y = np.moveaxis(x, [0, 1],[-1, -2])  # shape (5,4,3)
print(y)
# [[[ 0 20 40]
#   [ 5 25 45]
#   [10 30 50]
#   [15 35 55]]
#
#  [[ 1 21 41]
#   [ 6 26 46]
#   [11 31 51]
#   [16 36 56]]
#
#  [[ 2 22 42]
#   [ 7 27 47]
#   [12 32 52]
#   [17 37 57]]
#
#  [[ 3 23 43]
#   [ 8 28 48]
#   [13 33 53]
#   [18 38 58]]
#
#  [[ 4 24 44]
#   [ 9 29 49]
#   [14 34 54]
#   [19 39 59]]]

2.4 rollaxis

numpy.rollaxis():将指定轴滚动到目标位置,其他轴的相对顺序保持不变。

函数定义:

def rollaxis(a, axis, start=0)

注意事项: 仅为了向后兼容性考虑,建议优先使用moveaxis,所有这里就不演示了。

2.5 permute_dims

numpy.permute_dims():通过轴的重新排列改变数组的维度结构(默认返回视图)。

函数定义:

def rollaxis(a, axis, start=0)

提示: permute_dimstranspose 的别名函数,功能完全等效。

2.6 swapaxes

swapaxes():交换数组的两个指定轴,调整数据的维度顺序而不改变数据本身。

函数、方法定义:

# 函数
def swapaxes(a, axis1, axis2):
# 方法
def swapaxes(self,axis1: SupportsIndex,axis2: SupportsIndex,
) -> ndarray[_Shape, _DType_co]: ...

参数说明:

  • a:输入的多维数组。
  • axis1:第一个待交换的轴索引。
  • axis2:第二个待交换的轴索引。

在之前我们学过转置函数(transpose),可以控制所有轴的顺序,而 swapaxes 可以看成它的一个特例,是一种只交换两个轴的操作。

示例 1 ,二维数组交换交换 0 轴和 1 轴:

import numpy as npx = np.array([[1, 2], [3, 4]])  # shape (2, 2)
y = np.swapaxes(x, 0, 1)  # 交换轴 0 和轴 1
print(y)
# 输出:
# [[1 3]
#  [2 4]]

示例 2 ,三维数组交换交换 0 轴和 2 轴,轴顺序由(0,1,2)变为(2,1,0),元素 a[x,y,k] 依次重新排入到 a[k,y,x] 的索引位置:

x = np.array([[[0, 1], [2, 3]],[[4, 5], [6, 7]]])  # shape (2, 2, 2)
y = np.swapaxes(x, 0, 2)  # 交换轴 0(外层)和轴 2(内层)
print(y)
# 输出:
# [[[0, 4],
#   [2, 6]],
#  [[1, 5],
#   [3, 7]]]

2.7 matrix_transpose

numpy.matrix_transpose():专为转置矩阵或批量矩阵设计的函数,仅交换输入数组的最后两个维度,其他维度保持不变。适用于遵循 Array API 标准的操作。

函数定义:

def matrix_transpose(x, /)

参数说明:

  • x:输入的类数组对象,形状为 (..., M, N),其中 ... 表示任意数量的前置维度,最后两个维度 MN 构成矩阵。

返回值:

  • outndarray 类型,形状为 (..., N, M)。每个最后两维的矩阵 M×N 被转置为 N×M,前置维度完全保留。

注意事项:

  • 仅转置最后两个维度,无论输入数组维度多高,只交换最后两个轴。
  • 适合处理堆叠的矩阵(如多个样本、多个通道的数据)。
  • 遵循 Array API 标准,行为与其他框架(如 PyTorchTensorFlow)一致。

示例 1 ,二维矩阵转置:

x = [[1, 2], [3, 4]]  # 形状 (2, 2)
y = np.matrix_transpose(x)
print(y)
# [[1, 3],
#  [2, 4]]

示例 2 ,三维矩阵转置时,每个矩阵独立转置,前置维度(第一维)保持不变:

x = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]  # 形状 (2, 2, 2)
y = np.matrix_transpose(x)
print(y)
# [[[1, 3],  # 第一个矩阵转置
#   [2, 4]],
#  [[5, 7],  # 第二个矩阵转置
#   [6, 8]]]

相关文章:

NumPy 2.x 完全指南【十七】转置操作

文章目录 1. 什么是转置2. 转置操作2.1 transpose2.2 ndarray.T2.3 moveaxis2.4 rollaxis2.5 permute_dims2.6 swapaxes2.7 matrix_transpose 1. 什么是转置 在线性代数中,矩阵转置是指将矩阵的行和列进行互换,即原矩阵的第 i i i 行、第 j j j 列元素…...

【数据架构04】数据湖架构篇

✅ 10张高质量数据治理架构图 无论你是数据架构师、治理专家,还是数字化转型负责人,这份资料库都能为你提供体系化参考,高效解决“架构设计难、流程不清、平台搭建慢”的痛点! 🌟限时推荐,速速收藏&#…...

使用OpenSSL生成根证书并自签署证书

生成根CA的私钥和证书 # 生成根 CA 的私钥 [rootdeveloper ssl]# openssl genrsa -out rootCA.key 2048 Generating RSA private key, 2048 bit long modulus (2 primes) ... ............................................................ e is 65537 (0x010001)# 使用私钥生…...

uniapp-商城-62-后台 商品列表(分类展示商品的布局)

每一个商品都有类别,比如水果,蔬菜,肉,粮油等等,另外每一个商品都有自己的属性,这些都在前面的章节进行了大量篇幅的介绍。这里我们终于完成了商品类的添加,商品的添加,现在到了该进…...

初识C++:模版

本篇博客主要讲解C模版的相关内容。 目录 1.泛型编程 2.函数模板 2.1 函数模版概念 2.2 函数模版格式 2.3 函数模版的原理 2.4 函数模版的实例化 1.隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型 2. 显式实例化&#xff1a;在函数名后的<>中指定模…...

【Elasticsearch】给所索引创建多个别名

Elasticsearch 是可以给索引创建多个别名的。 为什么可以创建多个别名 1. 灵活性 - 别名可以为索引提供一个更易于理解的名称&#xff0c;方便用户根据不同的业务场景或用途来引用同一个索引。例如&#xff0c;一个索引可能同时服务于多个不同的应用程序或服务&#xff0c;通…...

Linux入门(九)任务调度

设置任务调度文件 /etc/crontab #设置调度任务 crontab -e #将任务设置到调度文件 # * * * * * # 第1个* 分钟 0-59 # 第2个* 小时 0-23 # 第3个* 天 1-31 # 第4个* 月 1-12 # 第5个* 周 0-7 0和7都代表的是星期天 #每分钟执行 */1 * * * * ls -l /etc/ > /tmp/to.txt0 8,…...

突破认知边界:神经符号AI的未来与元认知挑战

目录 一、神经符号AI的核心领域与研究方法 &#xff08;一&#xff09;知识表示&#xff1a;构建智能世界的语言 &#xff08;二&#xff09;学习与推理&#xff1a;让机器“思考”与“学习” &#xff08;三&#xff09;可解释性与可信度&#xff1a;让AI更透明 &#xf…...

Java 处理地理信息数据[DEM TIF文件数据获取高程]

目录 1、导入依赖包 2、读取方法 3、其他相关地理信息相关内容&#xff1a; 1️⃣常用的坐标系 1、GIS 中的坐标系一般分为两大类&#xff1a; 2. ✅常见的地理坐标系 2.0 CGCS2000&#xff08;EPSG:4490&#xff09; 2.1 WGS84 (World Geodetic System 1984) &#xff08;EPSG…...

谈谈对dubbo的广播机制的理解

目录 1、介绍 1.1、广播调用 1、工作原理 1.2、调用方式 1、Reference 注解 2、XML 配置 3、全局配置 1.3、 广播机制的特性 2、重试机制 2.1、默认行为 2.2、自定义逻辑 1、在业务层封装重试逻辑 2、使用 Reference 3、广播调用的实践 3.1、常用参数 1.…...

对接钉钉消息样例:DING消息、机器人

一、钉钉开放平台配置信息 private static String robotCode private static String appkey private static String appsecret private static Long agentId 二、钉钉开放平台token、用户信息 public static Client createClient() throws Exception {Config config n…...

003-类和对象(二)

类和对象&#xff08;二&#xff09; 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff…...

使用Rancher在CentOS 环境上部署和管理多Kubernetes集群

引言 随着容器技术的迅猛发展&#xff0c;Kubernetes已成为容器编排领域的事实标准。然而&#xff0c;随着企业应用规模的扩大&#xff0c;多集群管理逐渐成为企业IT架构中的重要需求。 Rancher作为一个开源的企业级多集群Kubernetes管理平台&#xff0c;以其友好的用户界面和…...

Java常用数据结构底层实现原理及应用场景

一、线性结构 1. ArrayList 底层实现&#xff1a;动态数组&#xff08;Object[] elementData&#xff09;。 核心特性&#xff1a; 默认初始容量为 10&#xff0c;扩容时容量增长为原来的 1.5 倍&#xff08;int newCapacity oldCapacity (oldCapacity >> 1)&#xf…...

利用朴素贝叶斯对UCI 的 mushroom 数据集进行分类

朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理的简单而有效的分类算法&#xff0c;特别适合处理文本分类和多类别分类问题。UCI的Mushroom数据集是一个经典的分类数据集&#xff0c;包含蘑菇的特征和类别&#xff08;可食用或有毒&#xff09;。 1. 数据…...

Linux火墙管理及优化

网络环境配置 使用3个新的虚拟机【配置好软件仓库和网络的】 F1 192.168.150.133 NAT F2 192.168.150.134 192.168.10.20 NAT HOST-ONLY 网络适配仅主机 F3 192.168.10.30 HOST-ONLY 网络适配仅主机 1 ~]# hostnamectl hostname double1.timinglee.org 【更…...

Visual Studio 制作msi文件环境搭建

一、插件安装 a. 插件寻找 在 Visual Studio 2017 中&#xff0c;如果你希望安装用于创建 MSI 安装包的插件&#xff0c;第一步是&#xff1a;打开 Visual Studio 后&#xff0c;点击顶部菜单栏中的 “工具”&#xff08;Tools&#xff09;&#xff0c;然后选择下拉菜单中的 “…...

(Java基础笔记vlog)Java中常见的几种设计模式详解

前言&#xff1a; 在 Java 编程里&#xff0c;设计模式是被反复使用、多数人知晓、经过分类编目的代码设计经验总结。他能帮助开发者更高效地解决常见问题&#xff0c;提升代码的可维护性、可扩展性和复用性。下面介绍Java 中几种常见的设计模式。 单例模式&#xff08;Singlet…...

C++ vector 深度解析:从原理到实战的全方位指南

一、引言 在 C 编程中&#xff0c;我们经常需要处理一组数据。比如&#xff0c;你想存储一个班级所有学生的成绩&#xff0c;或者保存用户输入的一组数字。最容易想到的方法是使用数组&#xff1a; int scores[100]; // 定义一个能存储100个成绩的数组但数组有两个明显的缺点…...

鸿蒙进阶——Framework之Want 隐式匹配机制概述

文章大纲 引言一、Want概述二、Want的类型1、显式Want2、隐式Want3、隐式Want的匹配 三、隐式启动Want 源码概述1、有且仅有一个Ability匹配2、有多个Ability 匹配需要弹出选择对话框3、ImplicitStartProcessor::ImplicitStartAbility3.1、GenerateAbilityRequestByAction3.1.1…...

antv/g6 图谱封装配置(二)

继上次实现图谱后&#xff0c;后续发现如果要继续加入不同样式的图谱实现起来太过麻烦&#xff0c;因此考虑将配置项全部提取封装到js文件中&#xff0c;图谱组件只专注于实现各种不同的组件&#xff0c;其中主要封装的点就是各个节点的横坐标&#xff08;x&#xff09;,纵坐标…...

OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建的是一个 最小值滤波器&#xff08;Minimum Filter&#xff09;&#xff0c;它对图像中每个像素邻域内的像素值取最小值。常用于&…...

网络抓包命令tcpdump及分析工具wireshark使用

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 SLES 12,银河麒麟 &#xff08;鲲鹏&#xff09;,银河麒麟 &#xff08;X86_64&#xff09;,银河麒麟&#xff08;龙…...

linux strace调式定位系统问题

strace 的基本功能 strace 的主要功能包括&#xff1a; 跟踪系统调用&#xff1a;显示进程执行时调用的系统函数及其参数和返回值。监控信号&#xff1a;记录进程接收到的信号。性能分析&#xff1a;统计系统调用的执行时间和次数。调试支持&#xff1a;帮助定位程序崩溃、性…...

femap许可与云计算集成

随着云计算技术的迅猛发展&#xff0c;越来越多的企业开始将关键应用和服务迁移到云端&#xff0c;以享受其带来的弹性扩展、高效管理和成本优化等优势。Femap作为一款强大的电磁仿真工具&#xff0c;通过与云计算的集成&#xff0c;将为企业带来前所未有的许可管理和仿真分析体…...

车载诊断架构 --- 车载诊断有那些内容(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

【Hadoop】大数据技术之 HDFS

目录 一、HDFS 概述 1.1 HDFS 产出背景及定义 1.2 HDFS 优缺点 1.3 HDFS 组成架构 1.4 HDFS 文件块大小 二、HDFS 的Shell 操作 三、HDFS 的读写流程&#xff08;面试重点&#xff09; 3.1 HDFS 写数据流程 3.2 HDFS 读数据流程 四、DataNode 4.1 DataNode 的工作机制…...

聊一下CSS中的标准流,浮动流,文本流,文档流

在网络上关于CSS的文章中&#xff0c;有时候能听到“标准流”&#xff0c;“浮动流”&#xff0c;“定位流”等等词语&#xff0c;还有像“文档流”&#xff0c;“文本流”等词&#xff0c;这些流是什么意思&#xff1f;它们是CSS中的一些布局方案和特性。今天我们就来聊一下CS…...

ATGM332D-F8N22单北斗多频定位导航模块

ATGM332D-F8N 系列模块是 12.216mm 尺寸的高性能单北斗多频定位导航模块。该系列模块产品基于中科微新一代 SOC 单北斗多频芯片 AT9880B&#xff0c;支持北斗二号和北斗三号的 B1I、B1C、B2I、B3I、B2a 和 B2b 频点信号。 主要特征 多频点单北斗接收机 支持北斗二号、北斗三号…...

2024年热门AI趋势及回顾

人工智能的崛起 2024 年可能会被铭记为人工智能不再是一种技术新奇事物&#xff0c;而是成为现实的一年。微软、Salesforce 和 Intuit 等巨头将人工智能融入主流企业解决方案&#xff1b;从文案写作到数据分析&#xff0c;专门的人工智能应用程序和服务如雨后春笋般涌现&#…...