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

如何从已有独立向量创建numpy复合dtype结构化数组

问题原因

你尝试的c=np.array((a,b), dtype=myrecord)无法正常运行的核心原因是:该写法会将完整的数组a、b分别作为第一条记录的两个字段值传入,和你需要的逐行对应配对的逻辑不匹配。

实现方法

以下两种是numpy原生的高效实现方式,都可以得到你期望的结果:

方法1:逐字段赋值(逻辑最直观,优先推荐)

先初始化对应长度的空结构化数组,再逐个给字段赋值即可,大数组场景下性能优异:

import numpy as np
myrecord = np.dtype([
    ('col1', 'u4'),
    ('col2', 'f8')
])
a = np.array([1,2,3,4])
b = np.array([10.1,20.1,30.1,40.1])

# 初始化指定类型的空数组
c = np.empty(len(a), dtype=myrecord)
# 按字段名对应赋值
c['col1'] = a
c['col2'] = b

方法2:调用records模块的fromarrays方法

直接传入待合并的数组列表,指定dtype即可一步生成结果:

c = np.core.records.fromarrays([a, b], dtype=myrecord)
注意事项

不推荐使用np.array(list(zip(a,b)), dtype=myrecord)的写法:该方法会先将numpy数组转为Python原生的列表、元组对象,数据量较大时性能损耗非常明显。

执行上述任意一种方法后,打印c即可得到你期望的输出:

array([(1, 10.1), (2, 20.1), (3, 30.1), (4, 40.1)],
      dtype=[('col1', '<u4'), ('col2', '<f8')])

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:01:03