如何用Numpy以特定规则拼接两个固定形状的数组?
Numpy无循环实现特定数组拼接
给定两个numpy数组:
frequencies:形状(2,),内容[100. 200.]values:形状(4, 2),内容[[1. 2.],[3. 4.],[5. 6.],[7. 8.]]
需要生成形状为(4, 2, 2)的输出数组,结构如下:
[[[100. 1.] [200. 2.]] [[100. 3.] [200. 4.]] [[100. 5.] [200. 6.]] [[100. 7.] [200. 8.]]]
实现方法(无循环,向量化操作)
核心思路是扩展维度+广播+轴拼接,利用numpy原生向量化特性完成操作:
import numpy as np # 定义输入数组 frequencies = np.array([100., 200.]) values = np.array([[1., 2.], [3., 4.], [5., 6.], [7., 8.]]) # 扩展frequencies维度:从(2,) → (1, 2, 1),支持广播到4个样本维度 freq_expanded = np.expand_dims(frequencies, axis=(0, 2)) # 扩展values维度:从(4, 2) → (4, 2, 1) vals_expanded = np.expand_dims(values, axis=2) # 在最后一个轴拼接数组,得到目标形状(4,2,2) out = np.concatenate([freq_expanded, vals_expanded], axis=2)
验证结果
执行代码后,输出完全符合需求:
print(out.shape) # 输出 (4, 2, 2) print(out) # 输出结构与预期一致的数组
原理说明
np.expand_dims为数组添加维度,让两个数组维度对齐到3维- numpy广播机制自动将
freq_expanded的(1,2,1)形状扩展为(4,2,1),与vals_expanded形状匹配 np.concatenate在指定轴完成拼接,最终生成目标结构
内容的提问来源于stack exchange,提问作者Michael I.
相关产品推荐
相关产品推荐

