如何以Pythonic方式将2D数组嵌入5D Numpy家谱数组?
解决5D NumPy数组插入父亲数据的问题
你的核心需求是把形状为(3,4)的父亲属性数组,插入到5D家谱数组的指定位置,最终得到形状为(3,2,2,1,4)的数组,且能通过family_array[i,0,1,0,:]获取第i个家族的父亲属性。
错误原因分析
你之前的代码用np.append(family_array[:, 0, 0, 0, :], father_array, axis=0),本质是把5D数组的一个(0,4)切片和(3,4)的数组拼接,结果只会保留最后两个维度,自然丢失了家族、世代、性别、个体这些维度信息。
正确实现方式
方式一:直接初始化目标数组并赋值
先创建符合目标形状的5D数组,再将父亲数据直接赋值到对应位置:
import numpy as np # 初始化形状为(3,2,2,1,4)的5D数组,可根据需求替换empty为zeros/full等 family_array = np.empty((3, 2, 2, 1, 4)) father_array = np.ones((3,4)) # 将父亲数据赋值到「任意家族、世代0(父母)、性别1(男性)、个体0」的位置 family_array[:, 0, 1, 0, :] = father_array
方式二:从空数组扩展拼接
如果需要基于原有的空数组逐步添加家族,可以先构造包含父亲数据的5D子数组,再和原数组拼接:
import numpy as np family_array = np.empty((0, 2, 2, 1, 4)) father_array = np.ones((3,4)) # 构造3个家族的完整5D模板,默认值用0填充(可按需修改) new_families = np.zeros((3, 2, 2, 1, 4)) # 把父亲数据写入对应位置 new_families[:, 0, 1, 0, :] = father_array # 拼接原数组和新家族数组,axis=0对应家族维度 family_array = np.concatenate([family_array, new_families], axis=0)
两种方式最终得到的family_array都满足你的需求:形状为(3,2,2,1,4),且family_array[i,0,1,0,:]能正确返回第i个家族父亲的4项属性。
内容的提问来源于stack exchange,提问作者Joso
相关产品推荐
相关产品推荐

