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

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

相关推荐
ljt27249606612 天前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
小里lilili4 天前
金融数据分析技术栈拆解:从NumPy到机器学习,金融数学背景该如何补齐代码短板
金融·数据分析·numpy
gCode Teacher 格码致知5 天前
Pandas教学25:NumPy 的实战价值集中的四件事
numpy·pandas
gCode Teacher 格码致知5 天前
Pandas教学24:NumPy、Pandas、Matplotlib三者之间的关系
numpy·pandas·matplotlib
BK贝壳6 天前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
Patrick在香港7 天前
一个加 1 的动作,把最大值变成了最小值
python·numpy·数据类型·整数溢出·数据精度
万粉变现经纪人7 天前
如何解决 pip install 安装报错 检测到 yanked 版本需更换可用版本 问题
人工智能·python·scrapy·numpy·pandas·pyqt·pip
BK贝壳7 天前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
郝学胜-神的一滴12 天前
AI 编程智能体 09:零门槛调用教程
人工智能·数据分析·自动化·numpy·pandas·量化投资
kaixin_啊啊13 天前
【零基础学AI】第 13 章——NumPy 和向量
人工智能·numpy