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() 则基于广播机制在不复制整块数据的前提下扩展数组形状。这些操作覆盖了从"数据真实复制"到"视图扩展"的不同机制,在数据构造与向量化计算中具有重要作用。

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

相关推荐
sunxunyong2 天前
服务器运行CPU/内存保护
服务器·python·numpy
scx_link3 天前
numpy中有一个方法叫ndarray吗?还是ndarray指的numpy中的数值的类型?
numpy
jerryinwuhan4 天前
python数据挖掘基础
python·数据挖掘·numpy
SugarFreeOixi5 天前
MATLAB绘图风格记录NP类型
python·matlab·numpy
小陈工6 天前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
REDcker6 天前
CentOS 与主流 Linux 发行版历史与版本综述
linux·centos·numpy
百年੭ ᐕ)੭*⁾⁾7 天前
DataFrame存入mysql以及读取操作
数据库·mysql·numpy·pandas·ipython
TheLegendMe9 天前
NumPy 矩阵操作 + 图像处理
图像处理·矩阵·numpy
李昊哲小课9 天前
NumPy轴方向统计在多维数据分析中的应用
python·数据分析·numpy