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

为NumPy数组分配名称与格式时出现列重复问题求助

解决数组合并后转结构化dtype出现列重复的问题

你遇到的问题根源在于:用np.concatenate得到的是普通二维数组(形状(5000,9)),直接调用astype(ds_dt)时,numpy无法正确将普通数组的列映射到结构化dtype的字段,反而会把每行的所有值广播到每个字段,最终导致每列重复9次。

下面是两种可行的解决方案:

方法一:用np.core.records.fromarrays直接生成结构化数组

这种方法不需要先合并普通数组,直接将两个输入数组的列按字段组合:

import numpy as np

namesList = ['EID', 'Domain', 'LAM ID1', 'LAM ID2','LAM ID3', 'LAM ID4', 'LAM ID5', 'LAM ID6', 'LAM ID7']
formatsList = ['int', 'int', 'float', 'float', 'float', 'float', 'float', 'float', 'float']

# 把两个数组的列拆分后合并成一个列表
all_cols = list(LAM_Strength_RFs_Data.T) + list(LAM_Strength_RFs.T)

# 生成结构化数组
Final_Lam_Strength = np.core.records.fromarrays(
    all_cols,
    names=namesList,
    formats=formatsList
)

方法二:创建空结构化数组后逐字段赋值

先初始化符合要求的结构化数组,再分别把两个输入数组的列赋值到对应字段:

import numpy as np

namesList = ['EID', 'Domain', 'LAM ID1', 'LAM ID2','LAM ID3', 'LAM ID4', 'LAM ID5', 'LAM ID6', 'LAM ID7']
formatsList = ['int', 'int', 'float', 'float', 'float', 'float', 'float', 'float', 'float']
ds_dt = np.dtype({'names':namesList, 'formats':formatsList})

# 创建空的结构化数组,长度5000
Final_Lam_Strength = np.empty(5000, dtype=ds_dt)

# 赋值整数数组的两列
Final_Lam_Strength['EID'] = LAM_Strength_RFs_Data[:, 0]
Final_Lam_Strength['Domain'] = LAM_Strength_RFs_Data[:, 1]

# 循环赋值浮点数数组的七列
for idx in range(7):
    Final_Lam_Strength[f'LAM ID{idx+1}'] = LAM_Strength_RFs[:, idx]

用这两种方法生成的结构化数组,每个字段对应原来数组的一列,不会出现重复问题,之后可以直接写入H5文件作为带列标题的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:20