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

Python中如何将任意形状的ndarray转换为一维数组?

不规则嵌套数组转一维数组的实现方法

你调用numpy.flatten()无法得到预期结果,是因为你构造的numpy.array属于object类型数组:内部元素长度不统一,嵌套的列表是作为单个对象存储的,numpy自带的扁平化方法仅支持结构规整的标准多维数组,无法直接解析嵌套的对象元素。

解决方案

方法1:通用递归实现(支持任意嵌套深度)

这个方法不限制嵌套层数,支持同时适配列表、numpy数组等多种嵌套结构:

import numpy as np

def flatten(nested_obj):
    for item in nested_obj:
        # 可根据需要调整要展开的类型范围,此处排除字符串避免拆分成单个字符
        if isinstance(item, (list, tuple, np.ndarray)):
            yield from flatten(item)
        else:
            yield item

my_array = np.array([4, [5, 6], [7, 8, 9]])
my_array_flattened = list(flatten(my_array))
# 输出结果:[4, 5, 6, 7, 8, 9]

方法2:两层嵌套专用写法(简单高效)

如果你确定只有两层嵌套,不需要适配更深的层级,可以直接用更简单的循环实现:

import numpy as np

my_array = np.array([4, [5, 6], [7, 8, 9]])
my_array_flattened = []
for x in my_array:
    if isinstance(x, (list, np.ndarray)):
        my_array_flattened.extend(x)
    else:
        my_array_flattened.append(x)

补充说明

如果你的数组是结构规整的标准多维numpy数组(比如np.array([[1,2],[3,4]])这类行列长度统一的数组),直接调用np.flatten()或者np.ravel()即可完成扁平化,不需要自定义实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:21:02