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

如何将单元素列表构成的NumPy数组转换为二维int数组

NumPy移除单元素内层列表转普通整型数组

问题场景

现有由单元素列表组成的NumPy数组,定义如下:

aaa = np.array(
[[ [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0] ],
 [ [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0] ],
 [ [0], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4] ] ]
)

需要将内层单元素列表转换为int类型值,最终得到如下结构的目标数组:

nnn = np.array(
    [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
     [0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ]]
)

直接调用无参数的sum()会累加数组所有值,尝试过的其他方法也始终保留内层列表结构,无法得到预期结果。

实现方法

原数组aaa的维度为(3, 20, 1),最后一个长度为1的维度就是包裹单值的冗余层,不需要遍历或做数值计算,直接移除该冗余维度即可得到目标结果,常用实现方式有3种:

  • 方法1:使用np.squeeze()自动移除所有长度为1的维度,通用性最好,不需要提前知道数组形状
    nnn = np.squeeze(aaa)
    
  • 方法2:直接索引提取最后一个维度的第0位元素,适合明确知道冗余层在最后一维的场景
    nnn = aaa[..., 0]
    
  • 方法3:通过reshape指定目标形状,适合已知前两维固定尺寸的场景
    nnn = aaa.reshape(3, 20)
    

结果验证

运行如下代码可验证输出完全匹配目标数组:

import numpy as np
aaa = np.array(
[[ [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0] ],
 [ [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0] ],
 [ [0], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4], [4] ] ]
)
nnn = np.squeeze(aaa)
print(nnn.shape) # 输出 (3, 20)
print(nnn)
# 输出结果:
# [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
#  [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
#  [0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4]]

之前用sum()出错是因为没有指定求和轴,如果指定在最后一个轴求和aaa.sum(axis=-1)也能得到相同结果,但求和属于数值计算操作,效率低于直接移除冗余维度的方案,非必要不使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:25:04