如何让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
相关产品推荐
相关产品推荐

