如何将不同形状的Numpy整数组而非元素追加到目标数组中
解决方案核心
你需要将目标数组指定为object类型,这类numpy数组支持将任意形状、类型的子数组作为单个独立元素存储,刚好适配你的需求。
方法1:一次性构造(推荐)
如果所有待存入的数组已经确定,直接把它们放在Python列表中再转换为dtype=object的numpy数组即可,性能最优。
import numpy as np # 定义待存入的子数组 B = np.array([1,2]) C = np.array(["hey"]) D = np.array([]) # 直接构造目标数组 A = np.array([B, C, D], dtype=object) # 验证输出 print(A.tolist()) # 输出:[[1, 2], ['hey'], []]
方法2:动态追加
如果需要逐步往空数组里追加元素,初始化时就指定dtype=object,再用np.append操作即可:
import numpy as np # 初始化空的object类型数组 A = np.array([], dtype=object) B = np.array([1,2]) C = np.array(["hey"]) D = np.array([]) # 逐个追加子数组 A = np.append(A, B) A = np.append(A, C) A = np.append(A, D) # 验证输出 print(A.tolist()) # 输出:[[1, 2], ['hey'], []]
原方法失败原因
你之前用append、concatenate、stack等方法失败,是因为numpy默认创建同质数组,要求所有元素的形状、数据类型一致,这类函数默认会尝试沿现有维度拼接数组内容,而不是把传入的数组当作独立元素存入。
注意事项
object类型的数组无法享受numpy的大部分向量化运算优化,如果后续不需要对A做批量数值运算,直接用Python列表存储这些子数组会更灵活,性能也更好。
内容的提问来源于stack exchange,提问作者Quasi
相关产品推荐
相关产品推荐

