NumPy 函数手册:数组重复与扩展

在 NumPy 中,数组不仅可以通过索引与切片访问数据,也可以通过重复与扩展操作生成新的数组结构。在数据分析、机器学习以及科学计算中,经常需要将某些数据模式重复多次,例如复制标签、扩展样本、生成网格数据或构造测试矩阵等。

这类操作称为数组重复(array repetition)或数组扩展(array expansion)。与数组变形不同,这些操作要么通过复制元素或数组结构生成新数组,要么通过广播机制在不复制数据的前提下扩展数组的"可视形状"(视图)。

按照 NumPy 的函数体系,数组重复与扩展操作通常可以分为三类:

(1)元素级重复

(2)结构级复制

(3)广播机制扩展

一、元素级重复

repeat()

按指定次数重复数组中的元素。

python 复制代码
numpy.repeat(a, repeats, axis=None)

参数说明:

• a:输入数组

• repeats:每个元素重复的次数,可以是整数或整数序列。当 repeats 为序列时,其长度必须与指定 axis 上的元素个数一致,否则会报错

• axis:指定重复操作的轴;若为 None,则先将数组展平成一维数组再进行重复

示例 1:一维数组

apache 复制代码
import numpy as np
a = np.array([1, 2, 3])
np.repeat(a, 2)

输出:

cs 复制代码
[1 1 2 2 3 3]

说明:每个元素都被重复两次。

示例 2:二维数组

cs 复制代码
a = np.array([[1, 2],              [3, 4]])
np.repeat(a, 2, axis=0)

输出:

css 复制代码
[[1 2] [1 2] [3 4] [3 4]]

说明:

沿 axis=0 对各行依次重复,因此每一行都连续出现两次。

二、结构级复制

tile()

按指定模式重复整个数组结构。

css 复制代码
numpy.tile(A, reps)

参数说明:

• A:输入数组

• reps:数组在各维度上的重复次数,可以是整数或整数序列

示例 1:

apache 复制代码
import numpy as np
a = np.array([1, 2, 3])
np.tile(a, 2)

输出:

cs 复制代码
[1 2 3 1 2 3]

说明:整个数组被复制两次。

示例 2:

cs 复制代码
a = np.array([[1, 2],              [3, 4]])
np.tile(a, (2, 3))

输出:

css 复制代码
[[1 2 1 2 1 2] [3 4 3 4 3 4] [1 2 1 2 1 2] [3 4 3 4 3 4]]

说明:数组在行方向复制两次,列方向复制三次。

示例 3:

apache 复制代码
np.tile(np.array([1, 2, 3]), (2, 2))

输出:

css 复制代码
[[1 2 3 1 2 3] [1 2 3 1 2 3]]

说明:当 reps 的维度长度大于数组的维度时,NumPy 会在数组前面补充新的维度,使其维度与 reps 对齐。

repeat() 与 tile() 都用于数组重复,但其重复方式不同:

• repeat():在元素层面进行重复(element-wise duplication)

• tile():在数组结构层面进行复制(block-wise replication)

三、广播机制扩展

broadcast_to()

按广播规则将数组扩展为指定形状。

php 复制代码
numpy.broadcast_to(array, shape)

参数说明:

• array:输入数组

• shape:目标形状。目标形状必须符合 NumPy 的广播规则(即从尾部维度开始对齐,原数组在对应维度上要么相等,要么为 1)

示例:

apache 复制代码
import numpy as np
a = np.array([1, 2, 3])
np.broadcast_to(a, (3, 3))

输出:

css 复制代码
[[1 2 3] [1 2 3] [1 2 3]]

说明:原数组被广播为新的形状。

需要注意的是,返回结果通常是只读视图(writeable=False),其核心机制是基于广播规则构造视图,而不是按目标形状复制整块数据;若尝试直接修改,通常会触发错误。

broadcast_arrays()

将多个数组广播到相同形状。

返回一个元组,其中包含广播后具有相同形状的数组视图。这些结果通常共享底层数据,而不是独立复制出的完整新数组。

go 复制代码
numpy.broadcast_arrays(*arrays)

参数说明:

• arrays:需要广播的数组序列

示例:

php 复制代码
a = np.array([1, 2, 3])b = np.array([[10],              [20]])
x,y = np.broadcast_arrays(a, b)print(x)print(y)

输出:

css 复制代码
[[1 2 3] [1 2 3]]
[[10 10 10] [20 20 20]]

说明:broadcast_arrays() 会根据 NumPy 的广播规则,将多个数组扩展为相同形状的数组。

该函数常用于在进行向量化计算前,使不同形状的数组具有一致的维度结构。

📘 小结

NumPy 提供了多种数组重复与扩展方式:repeat() 用于元素级复制,tile() 用于结构级复制,而 broadcast_to() 与 broadcast_arrays() 则基于广播机制在不复制整块数据的前提下扩展数组形状。这些操作覆盖了从"数据真实复制"到"视图扩展"的不同机制,在数据构造与向量化计算中具有重要作用。

"点赞有美意,赞赏是鼓励"

相关推荐
编程阿峰18 小时前
Python 环境配置(二)安装jupyter、matplotlib、numpy库
开发语言·python·jupyter·numpy·matplotlib
swany19 小时前
同步数据中,只需要几秒钟 & milvus向量数据库不可用 dify1.16.1 升级后踩坑记录
开发语言·python·numpy
未知违规用户2 天前
大模型项目:知识库构建工具与 LangChain 操作ChromaDB
人工智能·python·langchain·numpy
huameinan狮子4 天前
数据分析基础:numpy学习
学习·数据分析·numpy
元Y亨H6 天前
numpy与pandas 的介绍
numpy·pandas
广州景颐光电12 天前
3种NumPy向量化实测:光源数据处理从2.3秒压到12.3ms
numpy
梅雅达编程笔记13 天前
零基础学 Python 第14章 | 模块、包与第三方库
开发语言·python·django·numpy·pandas
梅雅达编程笔记13 天前
零基础学 Python 第15章 | 类与对象:面向对象编程入门
开发语言·python·django·numpy·pandas
pulinzt13 天前
Tableau的基础使用
数据库·numpy
梅雅达编程笔记14 天前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas