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

如何用Numpy向量化计算对象型数组中各子数组的长度?

如何用Numpy向量化计算object类型数组中每个子数组的长度?

问题场景

我有一个dtype=object的Numpy数组,其中每个元素都是独立的子数组,想要计算每个子数组的长度并生成新的Numpy数组。目前用显式for循环实现,但希望用纯Numpy的完全向量化操作提升性能。

示例代码:

import numpy as np

indices = np.array([np.array([1, 2, 3]), np.array([4, 5]), np.array([6, 7, 8, 9])], dtype=object)
group_lengths = np.array([len(group) for group in indices])

print(group_lengths)

预期输出:

[3 2 4]

核心结论

这种场景下无法实现纯Numpy的完全向量化操作,原因在于:

  • Numpy的向量化操作依赖于数组的同构性,即所有元素的结构、长度必须一致。而你的object数组中每个子数组长度不同,属于异构的对象集合,Numpy没有原生的批量API能直接处理这种异构元素的len计算。
  • 诸如np.vectorize这类工具本质上只是对循环的包装,并非真正的向量化操作,性能不会比显式循环更优,甚至可能因为额外的包装开销更慢。

最优方案

你当前使用的显式for循环就是这个场景下的最高效方案:

  • len()对于Numpy数组是O(1)操作,直接调用的开销极低;
  • 遍历object数组的循环本身只是逐个访问对象,没有额外的性能损耗。

更新:感谢各位的见解与说明!我现已了解到我的使用场景无法实现完全向量化,将沿用现有方案,因为在当前情况下它是最高效的方法。

内容的提问来源于stack exchange,提问作者m-fabregue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:54:54