作者:bjkml | 来源:互联网 | 2024-11-30 18:35
NumPy 是 Python 中用于科学计算的基础库,其核心功能之一就是提供了强大的 N 维数组对象(ndarray)。本文将详细介绍 ndarray 的结构及其索引方式。
ndarray 对象简介
- ndarray 是 NumPy 中最基础的数据结构,用于存储同类型的多维数组数据。
- 每个元素在内存中占用相同的字节空间,确保了高效的存取速度。
- ndarray 内部包含一个指向实际数据的指针、数据类型描述符(dtype)、数组的形状(shape)以及跨度(stride)信息。
ndarray 的内部结构
- 数据指针:指向实际数据存储的位置。
- 数据类型(dtype):描述数组中每个元素的数据类型和大小。
- 形状(shape):一个元组,表示数组在各个维度上的大小。
- 跨度(stride):一个元组,表示在每个维度上移动一个单位所需跨越的字节数。
创建 ndarray 的方法
- 空数组:使用
np.empty()
创建未初始化的数组。
- 零数组:使用
np.zeros()
创建所有元素均为 0 的数组。
- 一数组:使用
np.ones()
创建所有元素均为 1 的数组。
- 全值数组:使用
np.full()
创建所有元素均为指定值的数组。
- 单位矩阵:使用
np.eye()
创建单位矩阵。
- 从现有数组创建:使用
np.asarray()
将其他序列转换为 ndarray。
- 从缓冲区创建:使用
np.frombuffer()
从缓冲区创建数组。
- 从迭代器创建:使用
np.fromiter()
从迭代器创建数组。
- 从数值范围创建:使用
np.arange()
、np.linspace()
和 np.logspace()
从数值范围创建数组。
- 随机数组:使用
np.random
模块生成随机数组。
ndarray 的索引与切片
- 基本索引:通过下标访问数组中的单个元素。
- 切片:类似于 Python 列表的切片操作,用于提取数组的一部分。
- 高级索引:包括整数数组索引、布尔索引和花式索引。
高级索引示例
import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
t = np.array([[0, 1, 2], [0, 1, 0]])
y = x[[0, 1, 2], [0, 1, 0]]
print(y) # 输出: [1 4 5]
布尔索引:通过布尔数组筛选符合条件的元素。x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print(x[x > 5]) # 输出: [ 6 7 8 9 10 11]
a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
print(a[~np.isnan(a)]) # 输出: [1. 2. 3. 4. 5.]
a = np.array([1, 2+6j, 5, 3.5+5j])
print('非复数:', a[~np.iscomplex(a)]) # 输出: 非复数: [1.+0.j 5.+0.j]
print('复数:', a[np.iscomplex(a)]) # 输出: 复数: [2.+6.j 3.5+5.j]
花式索引:通过任意数组形式的索引来访问数组。广播机制
广播机制允许不同形状的数组之间进行算术运算,NumPy 会自动扩展较小的数组以匹配较大的数组形状。
丰富的函数支持
NumPy 提供了大量的数学函数和统计函数,支持各种数组操作,如求和、排序、统计等。