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

如何用Pythonic方法获取NumPy多维数组中最短子数组的形状?

当然有Pythonic的解决办法啦!针对你这种内部子数组长度不一的object类型NumPy数组,下面几个方法都能高效找到最短子数组的长度(也就是你说的「最短形状」):

方法1:列表推导式 + min() 函数

这是最直观也最符合Python风格的写法,直接遍历数组里的每个子数组,提取它们的长度(通过shape[0],因为你的子数组都是一维的),再取最小值:

import numpy as np

x = np.array([ np.array([0, 1, 2, 3, 4, 5]), np.array([0, 1, 2, 3, 4]), np.array([0, 1, 2, 3]), np.array([0, 1, 2, 3, 4]), np.array([0, 1, 2, 3, 4, 5, 6]), ])
min_sub_length = min(sub_arr.shape[0] for sub_arr in x)
print(min_sub_length)  # 输出:4
方法2:map() + 匿名函数 + min()

如果你习惯用map函数处理迭代对象,也可以这么写,逻辑和上面完全一致:

min_sub_length = min(map(lambda arr: arr.shape[0], x))
补充说明

你的数组x是object类型的NumPy数组——因为内部子数组长度不一致,NumPy无法将它转换成规整的多维数组,所以直接迭代x就能逐个获取里面的子数组,操作起来和普通Python列表几乎一样。如果你的子数组是多维的,想要获取完整的最短形状(比如(2,3)这种),可以把代码改成min(sub_arr.shape for sub_arr in x),它会按元组的比较规则找出最小的形状。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:47:33