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

如何让Numpy将等长数组列表转为数组的数组而非合并矩阵?

嘿,这个问题我太懂了!numpy的这个自动合并行为确实容易让人头疼——它总是优先把规整的嵌套数组变成连续的多维矩阵,但咱们就是想要一个装着数组的对象数组对吧?

给你几个靠谱的解决方案:

方法1:手动初始化对象数组并填充

先创建一个指定dtype=object的空数组,再把每个子数组逐个放进去,这样numpy就不会自作主张合并它们了:

import numpy as np

list_1 = [[np.array([1,2,3]), np.array([4,5,6])]][0]  # 先提取内层的列表
# 初始化一个长度匹配的空对象数组
obj_array = np.empty(len(list_1), dtype=object)
# 逐个赋值
for idx, sub_arr in enumerate(list_1):
    obj_array[idx] = sub_arr

print(obj_array)
# 输出:array([array([1, 2, 3]), array([4, 5, 6])], dtype=object)

方法2:用np.fromiter直接创建对象数组

fromiter方法会把可迭代对象里的每个元素当作独立对象处理,指定dtype=object就能得到你想要的结果:

import numpy as np

list_1 = [[np.array([1,2,3]), np.array([4,5,6])]][0]
obj_array = np.fromiter(list_1, dtype=object)

print(obj_array)
# 同样输出符合要求的对象数组

为什么默认会变成多维数组?

简单说,numpy天生偏爱连续的多维数组(运算效率更高),当它发现所有子数组的形状完全一致时,就会自动把它们堆叠成一个更高维度的矩阵。而咱们上面的方法都是明确告诉numpy:“别合并,把每个元素当成单独的对象存起来”。

如果你的列表外层还有嵌套(比如原问题里的[[arr1, arr2]]),记得先提取内层的[arr1, arr2]再处理哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:44:28