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

如何创建嵌套rec数组?多数组合并为结构化数组的可扩展方案

解决方法

要将多个numpy数组合并为可通过字段名访问的recarray(结构化数组),且满足扩展需求,可按以下步骤实现:

1. 用字典管理字段与数组

把所有需要合并的数组按「字段名-数组」的形式存入字典,新增字段时直接添加键值对即可,无需修改后续逻辑。

2. 定义结构化数组的类型

使用object类型作为每个字段的存储类型,这样可以直接存储原数组转换后的元组,匹配你需要的输出格式。

3. 创建并赋值recarray

生成长度为1的recarray,再遍历字典为每个字段赋值。


完整代码示例

import numpy as np

# 原数组
name = np.array(['a', 'b', 'c'])
val = np.array([0.4, 0.5, 0.6])
alt = np.array([1.1, 2.1, 3.1])
b = np.array([17.2])

# 用字典管理所有字段,新增字段直接添加即可
field_map = {
    "name": name,
    "val": val,
    "alt": alt,
    "b": b
}

# 定义dtype:每个字段为object类型
dtype = [(field, object) for field in field_map.keys()]
# 创建长度为1的recarray
result_arr = np.recarray(1, dtype=dtype)

# 为每个字段赋值,将数组转为元组
for field, arr in field_map.items():
    result_arr[field] = tuple(arr)

# 测试访问
print(result_arr["name"])  # 输出:('a', 'b', 'c')
print(result_arr["b"])     # 输出:(17.2,)

扩展说明

  • 新增字段时,只需在field_map字典中添加对应的键值对,无需修改其他代码;
  • 不管大部分数组的长度如何动态变化,只要保证单个长度为1的数组正常存入字典,逻辑都能适配;
  • 如果需要保留numpy数组格式而非元组,可将dtype定义改为[(field, (arr.dtype, arr.shape)) for field, arr in field_map.items()],此时访问字段会返回numpy数组,而非元组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:42