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

如何让Numpy数组支持变长?不规则长度元素实现方法

解决方案

1. 直接使用Python原生列表

Python列表天然支持不规则长度的嵌套结构,可通过列表推导式直接完成转换:

original = [[0,0,1],[0,1,2]]
result = [list(filter(lambda x: x != 0, sublist)) for sublist in original]
# 输出: [[1], [1, 2]]

无需额外依赖,操作灵活,是处理这类场景最直接的方式。

2. NumPy的object类型数组

若想保留NumPy数组的容器形式,可创建object类型的NumPy数组,它允许每个元素为任意Python对象(包括长度不同的列表):

import numpy as np

original_np = np.array([[0,0,1],[0,1,2]])
processed_list = [list(filter(lambda x: x != 0, sublist)) for sublist in original_np.tolist()]
result_np = np.array(processed_list, dtype=object)
# 输出: array([list([1]), list([1, 2])], dtype=object)

注意:object数组无法利用NumPy的向量化运算优势,仅作为兼容容器使用。

3. 使用Pandas处理

如果需要后续做数据清洗、分析,可借助Pandas的Series或DataFrame存储变长序列:

import pandas as pd

original = [[0,0,1],[0,1,2]]
processed = [list(filter(lambda x: x != 0, sublist)) for sublist in original]
s = pd.Series(processed)
# 输出:
# 0       [1]
# 1    [1, 2]
# dtype: object

Pandas支持对变长序列做分组、聚合等操作,适配数据处理场景。

4. 深度学习场景:变长张量库

如果是深度学习需求,PyTorch的PackedSequence或TensorFlow的RaggedTensor专为变长序列设计,支持高效运算:

  • PyTorch示例:
import torch
from torch.nn.utils.rnn import pack_sequence

tensors = [torch.tensor([1]), torch.tensor([1,2])]
packed_seq = pack_sequence(tensors, enforce_sorted=False)
  • TensorFlow示例:
import tensorflow as tf

ragged_tensor = tf.ragged.constant([[1], [1,2]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:04