本系列所有文章都放在
数据科学标签,总目录如下:
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 的各种创建方法。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)