
3.1 ndarray 的核心特性
NumPy 数组(ndarray)是 NumPy 库的核心数据结构,它是一种高效的多维同构数组。ndarray 具有以下三个核心特性:
- 多维性:支持 0 维(标量)、1 维(向量)、2 维(矩阵)及更高维数组
- 同质性:所有元素类型必须一致(通过
dtype指定) - 高效性:基于连续内存块存储,支持向量化运算
3.1.1 多维性
ndarray 可以表示从 0 维到高维的多种数据结构。通过 ndim 属性可以查看数组的维度数量(number of dimensions)。
0 维数组(标量):
import numpy as np
arr = np.array(5) # 创建0维ndarray数组print(arr)print('arr的维度是:', arr.ndim)输出:
5arr的维度是: 01 维数组(向量):
arr = np.array([1, 2, 3]) # 创建1维ndarray数组print(arr)print('arr的维度是:', arr.ndim)输出:
[1 2 3]arr的维度是: 12 维数组(矩阵):
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 创建2维ndarray数组print(arr)print('arr的维度是:', arr.ndim)输出:
[[1 2 3] [4 5 6]]arr的维度是: 23.1.2 同质性
ndarray 要求所有元素类型必须一致。当传入不同类型的元素时,NumPy 会自动进行类型转换,将所有元素统一为同一种类型。
整型与字符串混合:
arr = np.array([1, 'hello']) # 不同类型的元素会被强制转换为同一类型print(arr)输出:
['1' 'hello']整型 1 被自动转换为字符串 '1',数组整体变为字符串类型。
整型与浮点型混合:
arr = np.array([1, 2.5]) # 不同类型的元素会被强制转换为同一类型print(arr)输出:
[1. 2.5]整型 1 被自动转换为浮点型 1.0,数组整体变为浮点类型。
3.2 ndarray 的常用属性
ndarray 提供了丰富的属性来描述数组的特征。以下是最常用的属性及其说明:
| 属性名称 | 通俗解释 | 使用示例 |
|---|---|---|
shape | 数组的形状:行数和列数(或更高维度的尺寸) | arr.shape |
ndim | 维度数量:数组是几维的(1维、2维、3维等) | arr.ndim |
size | 总元素个数:数组中所有元素的总数 | arr.size |
dtype | 元素类型:数组中元素的类型(整数、浮点数等) | arr.dtype |
T | 转置:行变列,列变行 | arr.T |
itemsize | 单个元素占用的内存字节数 | arr.itemsize |
nbytes | 数组总内存占用量:size * itemsize | arr.nbytes |
flags | 内存存储方式:是否连续存储(高级优化) | arr.flags |
注意: 属性和方法的区分方式是看是否带括号——不带括号的是属性(如 arr.ndim),带括号的是方法。
下面通过不同维度的数组来演示这些属性的使用。
0 维数组的属性:
arr = np.array(1)print(arr)print('数组的形状:', arr.shape)print('数组的维度:', arr.ndim)print('元素的个数:', arr.size)print('数组的类型:', arr.dtype)print('元素的转置:', arr.T)输出:
1数组的形状: ()数组的维度: 0元素的个数: 1数组的类型: int64元素的转置: 11 维数组的属性:
arr = np.array([1, 2.5, 3])print(arr)print('数组的形状:', arr.shape)print('数组的维度:', arr.ndim)print('元素的个数:', arr.size)print('数组的类型:', arr.dtype)print('元素的转置:', arr.T)输出:
[1. 2.5 3. ]数组的形状: (3,)数组的维度: 1元素的个数: 3数组的类型: float64元素的转置: [1. 2.5 3. ]注意 1 维数组的形状为 (3,),表示只有一个维度,长度为 3。1 维数组的转置等于其自身。
2 维数组的属性:
arr = np.array([[1, 2, 3], [4, 5, 6]])print(arr)print('数组的形状:', arr.shape)print('数组的维度:', arr.ndim)print('元素的个数:', arr.size)print('数组的类型:', arr.dtype)print('元素的转置:', arr.T)输出:
[[1 2 3] [4 5 6]]数组的形状: (2, 3)数组的维度: 2元素的个数: 6数组的类型: int64元素的转置: [[1 4] [2 5] [3 6]]2 维数组的转置操作会将行变为列、列变为行。原数组形状为 (2, 3),转置后形状变为 (3, 2)。
3.3 矩阵的基本概念
在深入学习 ndarray 之前,有必要了解一些矩阵的基本概念。矩阵是线性代数中的基础数据结构,也是 NumPy 中 2 维数组的数学原型。
3.3.1 数组与矩阵的对比
在 NumPy 中,不同维度的数组对应不同的数学对象:
| 名称 | 维度 | 示例 | 备注 |
|---|---|---|---|
| 标量 | 0 维 | 5, 3.14 | 单个数字,无行列 |
| 向量 | 1 维 | [1, 2, 3] | 只有行或列(一维数组) |
| 矩阵 | 2 维 | [[1, 2], [3, 4]] | 严格的行列结构(二维表) |
| 张量 | ≥3 维 | [[[1, 2], [3, 4]]] | 高阶数组(如 RGB 图像) |
3.3.2 矩阵的定义
矩阵是一个由行(row)和列(column)排列成的矩形数组。例如:
- 形状(shape):这个矩阵有 2 行 3 列,记作 2×3 矩阵
- 元素(entry):矩阵中的每个数字称为元素
3.3.3 特殊矩阵
在线性代数和 NumPy 中,有几类常见的特殊矩阵:
| 矩阵类型 | 定义 | 例子 |
|---|---|---|
| 零矩阵 | 所有元素为 0 | |
| 单位矩阵 | 对角线上为 1,其余为 0 | |
| 对角矩阵 | 只有对角线有非零值 | |
| 对称矩阵 |
这些特殊矩阵在 NumPy 中都有对应的创建方法,我们将在下一节中详细学习。
3.4 本节小结
本节完成了以下内容:
- 介绍了 ndarray 的核心特性:多维性、同质性和高效性
- 讲解了 ndarray 的常用属性:
shape、ndim、size、dtype、T、itemsize、nbytes、flags - 了解了矩阵的基本概念,包括标量、向量、矩阵、张量的区别,以及特殊矩阵的类型
下一节我们将学习 ndarray 的各种创建方法。
数据分析
连载中分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 95 天
部分内容可能已过时
评论