You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拼接3D与2D数组:将指定形状数组合并为目标形状

如何合并两个特定形状的numpy数组

嘿,我来帮你搞定这个维度合并的问题!首先得明确咱们的目标:把形状为(4133,10000,12)的数组(就叫它arr1吧)和(4133,2)的数组(arr2)合并成(4133,10000,12,2)的结果。核心思路是利用numpy的广播机制来对齐维度,这样既高效又省内存。

具体步骤

  • 给两个数组补全维度:
    • 对于arr1,在最后添加一个维度,将形状从(4133,10000,12)变为(4133,10000,12,1),方便后续和arr2的扩展维度拼接。
    • 对于arr2,在中间插入两个维度,将形状从(4133,2)变为(4133,1,1,2)——借助numpy的广播机制,这个形状会自动适配成(4133,10000,12,2)的逻辑形状,无需实际复制数据。
  • 沿着最后一维拼接:
    将补全维度后的两个数组沿最后一个维度(axis=-1)拼接,即可得到目标形状的数组。

代码实现

这里给你两种写法,功能完全一致,看你习惯哪种风格:

写法一(用np.expand_dims明确添加维度)

import numpy as np

# 假设你的两个数组已经定义完成
arr1 = np.random.rand(4133, 10000, 12)
arr2 = np.random.rand(4133, 2)

# 扩展数组维度
arr1_expanded = np.expand_dims(arr1, axis=-1)  # 形状变为(4133,10000,12,1)
arr2_expanded = np.expand_dims(np.expand_dims(arr2, axis=1), axis=2)  # 形状变为(4133,1,1,2)

# 拼接得到最终结果
result = np.concatenate([arr1_expanded, arr2_expanded], axis=-1)
print(result.shape)  # 输出:(4133, 10000, 12, 2)

写法二(用None简化维度扩展)

numpy支持用None快速插入维度,代码会更简洁:

import numpy as np

arr1 = np.random.rand(4133, 10000, 12)
arr2 = np.random.rand(4133, 2)

# 用None添加维度,效果和expand_dims完全相同
arr1_expanded = arr1[..., None]  # ...代表保留前面所有维度,最后新增一维
arr2_expanded = arr2[:, None, None, :]  # 在第1、2位插入新维度

result = np.concatenate([arr1_expanded, arr2_expanded], axis=-1)
print(result.shape)  # 同样输出目标形状

小提醒:别用np.tile

可能有人会想到用tile来重复arr2的元素,但非常不推荐——tile会实际复制大量数据,对于你这种规模的数组来说,会占用极大的内存空间。而广播机制只是逻辑上的维度扩展,不会额外消耗内存,效率高得多。

内容的提问来源于stack exchange,提问作者bjornsing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:32:52