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

如何阻止numpy.array将同形状数组列表转换为多维数组?

解决方法:强制返回对象数组而非多维数组

当然有办法实现这个需求!Numpy默认会在子数组形状一致时自动堆叠成多维数组,但我们可以通过以下几种方式强制它返回对象数组(每个元素都是独立的一维数组):

方法1:先创建空对象数组再逐个赋值

这是最直接可靠的方式,先初始化一个指定长度的对象数组,再把每个子数组赋值进去,完全避免自动堆叠:

import numpy as np

# 初始化长度为2的对象数组
obj_arr = np.empty(2, dtype=object)
# 分别赋值形状相同的子数组
obj_arr[0] = np.zeros(8)
obj_arr[1] = np.zeros(8)

print(obj_arr)
# 输出:
# array([array([0., 0., 0., 0., 0., 0., 0., 0.]),
#        array([0., 0., 0., 0., 0., 0., 0., 0.])], dtype=object)

方法2:用嵌套列表包装后重塑形状

如果不想手动赋值,可以先把每个子数组放在单元素列表里,让Numpy无法直接堆叠,再通过reshape还原成一维对象数组:

import numpy as np

obj_arr = np.array([[np.zeros(8)], [np.zeros(8)]], dtype=object).reshape(-1)
print(obj_arr)
# 输出效果和方法1完全一致

为什么原来的写法会合并?

当你直接传入形状一致的子数组列表时,即使指定了dtype=object,Numpy仍然会优先尝试将它们堆叠成多维数组——这是它的默认行为,因为形状一致的数组更适合用多维结构存储。只有当子数组形状不一致时,它才会退而求其次创建对象数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:37