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

如何不使用循环将numpy N维数组转换为(N-1)维数组组成的列表

问题解决方案

你给出的循环逻辑本质是在形状为(7, 3, 6)的原数组的1号轴(从0开始计数)位置插入一个长度为1的新维度,直接使用numpy内置的维度操作即可实现,不需要写Python层面的循环,三种常用实现方式如下:

  • 方法1:使用np.expand_dims(可读性最高,推荐使用)
    直接在指定轴位置插入新维度,代码如下:

    import numpy as np
    # 构造原数组
    arr3d = np.random.randint(1, 100, size=7 * 3 * 6).reshape((7, 3, 6))
    # 插入新维度得到目标结果
    arr_what_i_want = np.expand_dims(arr3d, axis=1)
    

    此时得到的arr_what_i_want形状为(7, 1, 3, 6),将你循环得到的列表转为numpy数组后二者完全相等。

  • 方法2:使用np.newaxis索引拓展
    通过numpy的索引语法直接新增维度:

    arr_what_i_want = arr3d[:, np.newaxis, ...]
    
  • 方法3:使用reshape直接调整形状
    因为数组总元素数不变,直接指定新形状即可:

    arr_what_i_want = arr3d.reshape(7, 1, 3, 6)
    

你可以通过以下代码验证结果和原循环版本完全一致:

# 原循环版本结果
arr_loop = []
for i in range(7):
    arr2d = arr3d[i]
    arr_loop.append([arr2d])
# 转为numpy数组后对比
print(np.array_equal(np.array(arr_loop), arr_what_i_want)) # 输出为True

如果你需要和原循环完全一致的嵌套列表结构,只需要在上述结果后调用.tolist()方法即可,也不需要额外写循环。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:27:00