numpy 多维数组的轴顺序

2 维数组的轴

在这里插入图片描述

如上图, 1个简单的2维数组(矩阵)

其中竖向的是0轴, 横向的是1轴, 他们的顺序不能乱, 因为我们必须以正确的顺序获取元素

举个例子:

arr = np.arange(1, 10)
arr = arr.reshape(3, 3)

"""
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
"""
logger.info(f"arr is:\n {
     
     arr}")

logger.info(f"the first item of second line is {
     
     arr[1,0]}") 
### 关于 NumPy 多维数组的详细解释和用法 NumPy 的核心功能之一是对多维数组的支持,这种支持不仅体现在数据结构本身,还在于高效的数组操作以及丰富的内置函数。以下是有关 NumPy 多维数组的核心概念及其常见用法的详细介绍。 --- #### 1. **什么是 NumPy 多维数组** NumPy 提供了一种名为 `ndarray` 的对象,用于存储同类型的元素集合。这些元素可以被组织成任意维度的形式,从而形成一维、二维或多维数组[^1]。 - **特点**: 高效内存管理、矢量化运算能力、支持广播机制。 - **用途**: 科学计算、数据分析、机器学习等领域广泛使用。 --- #### 2. **创建 NumPy 多维数组** ##### 基本创建方法 可以通过多种方式创建 NumPy 数组: - 使用 `np.array()` 方法从 Python 列表或其他序列化数据转换而来。 ```python import numpy as np # 创建一维数组 arr_1d = np.array([1, 2, 3]) # 创建二维数组 arr_2d = np.array([[1, 2], [3, 4]]) # 创建三维数组 arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) ``` ##### 特殊数组生成 除了手动定义外,还可以通过一些特殊函数自动生成特定模式的数组: - `np.zeros()`: 创建全零数组。 - `np.ones()`: 创建全一阵列。 - `np.empty()`: 不初始化值的数组(可能含有随机垃圾值)。 - `np.arange(start, stop, step)`: 类似 Python 的 `range()` 函数,但返回的是 NumPy 数组。 - `np.linspace(start, stop, num_points)`: 在指定范围内均匀分布一定数量的点。 示例代码如下: ```python zeros_arr = np.zeros((3, 4)) # 形状为(3, 4)的全零数组 ones_arr = np.ones((2, 2)) # 形状为(2, 2)的全一阵列 arange_arr = np.arange(0, 10, 2) # 范围内的步长数组 linspace_arr = np.linspace(0, 1, 5)# 等间距划分区间 ``` --- #### 3. **多维数组的关键属性** | 属性名 | 描述 | |------------|----------------------------------------------------------------------------------------| | `.shape` | 表示数组的形状,返回一个元组 `(dim1_size, dim2_size, ...)` | | `.dtype` | 数据类型描述符,指明数组中元素的数据类型 | | `.size` | 总共包含的元素个数 | | `.ndim` | 维度数目 | 示例演示: ```python example_array = np.random.rand(2, 3, 4) print("Shape:", example_array.shape) # 输出: Shape: (2, 3, 4) print("Data Type:", example_array.dtype) # 输出: Data Type: float64 或其他实际类型 print("Size:", example_array.size) # 输出: Size: 24 print("Dimensions:", example_array.ndim) # 输出: Dimensions: 3 ``` --- #### 4. **索引与切片** NumPy 支持类似于 Python 列表的索引和切片语法,但在多维情况下更为强大[^2]。 ##### 单元素访问 通过逗号分隔多个索引来定位单个元素的位置。 ```python arr = np.array([[1, 2, 3], [4, 5, 6]]) element = arr[1, 2] # 访问第二行第三列的元素 -> 结果为 6 ``` ##### 子数组提取 利用切片语法 `[start:end:step]` 可以轻松截取子区域。 ```python sub_array = arr[:, :2] # 截取所有行前两列 -> 结果为 [[1, 2], [4, 5]] ``` ##### 条件筛选 结合布尔掩码实现条件过滤。 ```python filtered = arr[arr > 3] # 找出大于3的所有元素 -> 结果为 [4, 5, 6] ``` --- #### 5. **高级特性:广播与转置** ##### 广播机制 即使两个数组形状不完全一致,在某些条件下仍可完成逐元素运算,这被称为广播。 ```python a = np.array([1, 2, 3]) # 形状为 (3,) b = np.array([[1], [2], [3]]) # 形状为 (3, 1) result = a + b # 自动扩展并加法 -> 结果为 [[2, 3, 4], [3, 4, 5], [4, 5, 6]] ``` ##### 转置操作 改变数组顺序以便重新排列数据布局。 ```python original = np.array([[1, 2], [3, 4]]) transposed = original.T # .T 是 transpose() 的快捷写法 -> 结果为 [[1, 3], [2, 4]] ``` --- #### 6. **查找与统计** 对于复杂查询需求,可通过组合逻辑表达式或专用工具完成[^3]。 - 查找满足条件的索引位置: ```python indices = np.where(vals == [1, 0]) # 寻找等于 [1, 0] 的所有坐标 ``` - 统计汇总信息: ```python mean_val = np.mean(arr) # 计算平均值 sum_val = np.sum(arr) # 求和 max_val = np.max(arr) # 最大值 min_val = np.min(arr) # 最小值 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值