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

如何扩展3D NumPy数组的深度维度?求通用实现方案

问题描述

假设有一个形状为3x3x1的3D NumPy数组:

[[[149]
  [121]
  [189]]

 [[ 32]
  [225]
  [ 44]]

 [[ 33]
  [133]
  [ 11]]]

希望将其扩展为3x3x3的数组,使最深层的每个值重复三次,目标数组如下:

[[[149 149 149]
  [121 121 121]
  [189 189 189]]

 [[ 32  32  32]
  [225 225 225]
  [ 44  44  44]]

 [[ 33  33  33]
  [133 133 133]
  [ 11  11  11]]]

尝试了以下代码:

for i in range(len(array)):
  for j in range(len(array[i])):
    array[i][j] = np.array(list(array[i][j]) * 3)
print(array)

但出现错误:

could not broadcast input array from shape (3,) into shape (1,)

需要实现针对m×n×p格式的数组的此类扩展。

解决方案

错误原因是原数组中每个array[i][j]的形状为(1,),而你赋值的是形状(3,)的数组,无法直接广播替换。NumPy提供了高效的内置方法完成这类维度扩展,无需手动循环:

方法1:使用np.tile

tile可在指定维度上重复数组,适合扩展最后一维的场景:

import numpy as np

# 初始化原数组
arr = np.array([[[149], [121], [189]],
                [[32], [225], [44]],
                [[33], [133], [11]]])

# 前两个维度不重复,最后一维重复3次
result = np.tile(arr, (1, 1, 3))
print(result.shape)  # 输出 (3, 3, 3)

针对m×n×p格式的数组,只需调整tile的第三个参数为需要扩展的次数即可。

方法2:使用np.repeat

repeat可按指定轴重复元素,精准控制扩展维度:

# 在第三个维度(索引从0开始)重复每个元素3次
result = np.repeat(arr, 3, axis=2)
print(result.shape)  # 输出 (3, 3, 3)

此方式适用于任意m×n×p的数组,只需修改重复次数和对应的轴参数即可。

方法3:重塑+广播(原理参考)

利用NumPy广播机制,先将原数组重塑为m×n的2D数组,再扩展维度实现广播:

result = arr.reshape(arr.shape[0], arr.shape[1], 1) * np.ones((1,1,3), dtype=arr.dtype)

该方式效率略低于前两种,仅作原理展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:07:30