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

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

相关推荐
嗝o゚13 小时前
CANN asnumpy 库——昇腾 NPU 原生 NumPy 兼容层
人工智能·numpy·cann·asnumpy
bloxed16 小时前
【AI大模型--NumPy-07】高级线性代数完全指南
人工智能·线性代数·numpy
charlee441 天前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
fengchengwu20121 天前
NumPy 数组常用函数手册:从入门到进阶
numpy
威尔逊·柏斯科·希伯理2 天前
机器学习第一天(共12天)
人工智能·python·机器学习·conda·numpy·pandas·matplotlib
杭州的平湖秋月2 天前
Numpy 的基础索引、高级索引、布尔索引和 take_along_axis
python·numpy·高级索引
松☆3 天前
昇腾NPU的信号处理加速库,跟NumPy的FFT有啥区别?
numpy·信号处理
松☆4 天前
Triton推理服务接昇腾NPU,GE后端怎么搭?
华为·性能优化·numpy·信号处理·harmonyos
bloxed4 天前
【AI大模型--NumPy-06】随机数生成与蒙特卡洛模拟
人工智能·numpy