如何将Awkward Array转成的Numpy数组转为(float32,float32)元组?
解决结构化Numpy数组转(float32, float32)元组的问题
问题背景
将Awkward Array通过ak.to_numpy()转换后得到带字段的结构化Numpy数组(dtype=[('phi', '<f8'), ('eta', '<f8')]),无法直接转为TensorFlow张量,且直接使用astype()会报错,需要转为(float32, float32)形式的元组。
解决方案
方法1:提取字段后单独转换类型
直接提取结构化数组的每个字段,分别转换为float32后组成元组:
import awkward as ak import numpy as np # 初始转换 array = ak.Array([{"phi": 1.1, "eta": 2.2}, {"phi": 3.3, "eta": 4.4}]) np_array = ak.to_numpy(array) # 提取字段并转为float32 phi = np_array['phi'].astype(np.float32) eta = np_array['eta'].astype(np.float32) # 得到目标元组 result = (phi, eta)
方法2:转为二维数组后拆分
先将结构化数组转为二维float64数组,再整体转float32并拆分为元组:
import awkward as ak import numpy as np # 初始转换 array = ak.Array([{"phi": 1.1, "eta": 2.2}, {"phi": 3.3, "eta": 4.4}]) np_array = ak.to_numpy(array) # 转为二维数组并转换类型 np_2d = np_array.view(np.float64).reshape(-1, 2).astype(np.float32) # 拆分为元组 phi, eta = np_2d[:, 0], np_2d[:, 1] result = (phi, eta)
关键说明
直接对结构化数组调用astype()报错的原因是:结构化数据类型无法直接转换为单一数值类型,必须先提取独立字段或转换为普通多维数组后再做类型转换。
内容的提问来源于stack exchange,提问作者Yusuf Çil
相关产品推荐
相关产品推荐

